我需要用变量的子字符串格式化字符串。如果我这样做:
sample="1234567890XXXX"
f"{sample[:5]}/{sample[5:10]}/{sample}/config"
效果很好:
'12345/67890/1234567890XXXX/config'
但是如果我使用格式:
"{sample[:5]}/{sample[5:10]}/{sample}/config".format(sample="1234567890XXXX")
我收到错误:
TypeError: string indices must be integers, not 'str'
有什么方法可以让它与
format
一起工作吗?
问题是,您使用的格式不正确。
语法是
<string>.format(<definition1>,<definition2>,...)
sample = "1234567890XXXX"
x = "{s1}/{s2}/{sample}/config".format(s1=sample[:5], s2=sample[5:10], sample=sample)
print(x)
这给出了输出:
12345/67890/1234567890XXXX/config
如你所愿...
希望您能理解这一点,谢谢。
正如@pho建议的,你可以将切片提供给str.format():
"{s1}/{s2}/{sample}/config".format(sample="1234567890XXXX", s1=sample[:5], s2=sample[5:10])
#output
'12345/67890/1234567890XXXX/config'
Python
f-strings
与 str.format()
模板非常不同。 Python f-strings
支持切片,并且不使用像格式化程序那样的 “迷你语言”。 Python 表达式的全部功能都可以在 f-string
的每个大括号内使用。
“格式规范”在格式字符串中包含的替换字段中使用,以定义如何呈现各个值(请参阅格式字符串语法和格式化字符串文字)。它们也可以直接传递给内置的 format() 函数。每个格式表类型可以定义如何解释格式规范。
https://docs.python.org/3/library/string.html#format-specification-mini-language
不,内置 str 格式不支持切片。不过,如果 f 字符串(运行时评估)不满足您的需求,有一个解决方法。
您可以使用运行时评估的“f”字符串。 Python f 字符串支持切片,并且不使用像格式化程序这样的“迷你语言”。