是否可以使用字符串格式来大写单词?例如,
"{user} did such and such.".format(user="foobar")
应该返回“Foobar做过这样的事情。”
请注意,我很清楚.capitalize()
;但是,这是我正在使用的代码(非常简化版本):
printme = random.choice(["On {date}, {user} did la-dee-dah. ",
"{user} did la-dee-dah on {date}. "
])
output = printme.format(user=x,date=y)
正如您所看到的,仅在user
中将x.capitalize()
定义为.format()
不起作用,从那时起它也将被应用(错误地)应用于第一个场景。由于我无法预测命运,因此无法知道提前选择哪个random.choice
。我该怎么办?
Addt'l note:只做output = random.choice(['xyz'.format(),'lmn'.format()])
(换句话说,单独格式化每个字符串,然后使用.capitalize()
来表示需要它的那些)不是一个可行的选择,因为printme
实际上是从~40 +字符串中选择的。
答案 0 :(得分:6)
您可以创建自己的string.Formatter
子类,以便识别可用于重新调整字符串的自定义conversion。
myformatter.format('{user!u} did la-dee-dah on {date}, and {pronoun!l} liked it. ',
user=x, date=y, pronoun=z)
答案 1 :(得分:5)
您可以传递额外的值而不使用它们,例如此轻量级选项
printme = random.choice(["On {date}, {user} did la-dee-dah. ",
"{User} did la-dee-dah on {date}. "
])
output = printme.format(user=x, date=y, User=x.capitalize())
最好的选择可能取决于你是否这样做足以需要你自己的全速Formatter
。
答案 2 :(得分:5)
正如@ IgnacioVazquez-Abrams所说,创建string.Formatter
的子类允许您扩展/更改格式字符串处理。
在您的情况下,您必须重载方法convert_field
from string import Formatter
class ExtendedFormatter(Formatter):
"""An extended format string formatter
Formatter with extended conversion symbol
"""
def convert_field(self, value, conversion):
""" Extend conversion symbol
Following additional symbol has been added
* l: convert to string and low case
* u: convert to string and up case
default are:
* s: convert with str()
* r: convert with repr()
* a: convert with ascii()
"""
if conversion == "u":
return str(value).upper()
elif conversion == "l":
return str(value).lower()
# Do the default conversion or raise error if no matching conversion found
super(ExtendedFormatter, self).convert_field(value, conversion)
# return for None case
return value
# Test this code
myformatter = ExtendedFormatter()
template_str = "normal:{test}, upcase:{test!u}, lowcase:{test!l}"
output = myformatter.format(template_str, test="DiDaDoDu")
print(output)
答案 3 :(得分:0)
在python 3.6中,您现在可以使用fstrings了。 https://realpython.com/python-f-strings/
>>> txt = 'aBcD'
>>> f'{txt.upper()}'
'ABCD'