我正在寻找一种更健壮的方式来转换下面的字符串。我想找到3个单词的前3个字母并改变大小写。这些词可以是任何东西,现在我只是为每个小写字母使用字符串替换。
s1 = 'hello.crazy.world.txt'
s1 = s1.replace('h','H')
答案 0 :(得分:5)
str.title
大写连续字母组 - 您只需要排除该扩展名。
一种方法:
In [5]: name, ext = s.rsplit('.', 1)
In [6]: '{}.{}'.format(name.title(), ext)
Out[6]: 'Hello.Crazy.World.txt'
答案 1 :(得分:1)
您可以使用str.capitalize
s1 = 'hello.crazy.world.txt'
out = '.'.join([i.capitalize() for i in s1.split('.')])
这会将所有首字母大写,生成'Hello.Crazy.World.Txt'
。
如果您只想对前三个单词执行此操作,则可以使用切片,然后附加扩展名。
s1 = 'hello.crazy.world.txt'
split = s1.split('.')
extension = split[-1]
capitalized = [i.capitalize() for i in split[:-1]]
capitalized.append(extension)
out = '.'.join(capitalized)
这会产生'Hello.Crazy.World.txt'
。
使用大写字母超过标题的优点是标题大写每个单词后一段时间,如果你有一个你不想大写的项目,你可以省略该项目(例如本例中的最后一项)。
更紧凑的方法是使用列表推导来大写每个项目,除了最后一项,合并列表并在一个步骤中加入结果字符串。:
s1 = 'hello.crazy.world.txt'
split = s1.split('.')
out = '.'.join([i.capitalize() for i in split[:-1]] + [split[-1]])
答案 2 :(得分:1)
最简单的解决方案是使用.title():
>>> "hello.crazy.world.txt".title()
"Hello.Crazy.World.Txt"
由于您不想将最后一部分大写,您可以:
parts = "hello.crazy.world.txt".split(".")
result = '.'.join(parts[:-1]).title() + "." + parts[-1]
答案 3 :(得分:0)
虽然你的问题含糊不清,但我想你想要这样的事情:
import os
st_filename = 'hello.crazy.world.txt'
st_base, st_ext = os.path.splitext(st_filename)
st_base = st_base.title()
st_filename = ''.join(st_base, st_ext)
# I am unsure if the splitext will work across platforms to be rejoined with join, but it seems to work on linux and Mac OS X