使用子字符串格式化字符串

问题描述 投票:0回答:2

我需要用变量的子字符串格式化字符串。如果我这样做:

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
一起工作吗?

python string format substring
2个回答
0
投票

问题是,您使用的格式不正确。

语法是

<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

如你所愿...

希望您能理解这一点,谢谢。


0
投票

正如@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 字符串支持切片,并且不使用像格式化程序这样的“迷你语言”。

https://stackoverflow.com/a/62024873/13086128

https://stackoverflow.com/a/49884004/13086128

© www.soinside.com 2019 - 2024. All rights reserved.