Python中格式化多行字符串的最优雅方式

3

我有一个多行字符串,想要使用自己的变量更改其中某些部分。我不太喜欢使用+运算符拼接相同的文本。有没有更好的替代方法?

例如(内部引号是必需的):

line = """Hi my name is "{0}".
I am from "{1}".
You must be "{2}"."""

我希望能够多次使用此功能来构建一个更大的字符串,最终看起来会像这样:

Hi my name is "Joan".
I am from "USA".
You must be "Victor".

Hi my name is "Victor".
I am from "Russia".
You must be "Joan".

有没有一种方法可以做到这样:

txt == ""
for ...:
    txt += line.format(name, country, otherName)
3个回答

4
info = [['ian','NYC','dan'],['dan','NYC','ian']]
>>> for each in info:
    line.format(*each)


'Hi my name is "ian".\nI am from "NYC".\nYou must be "dan".'
'Hi my name is "dan".\nI am from "NYC".\nYou must be "ian".'

星号操作符将列表解包成“format”方法中的参数。

2

除了列表,您还可以使用字典。如果您需要同时跟踪多个变量,则这很有用。

text = """\
Hi my name is "{person_name}"
I am from "{location}"
You must be "{person_met}"\
"""
person = {'person_name': 'Joan', 'location': 'USA', 'person_met': 'Victor'}

print text.format(**person)

请注意,我以不同的方式输入文本,因为这样可以更轻松地对齐文本。但是,在开始处和结束处之前,您必须添加 '\'。

现在,如果您有一个包含多个字典的列表,您可以轻松地执行以下操作:

people = [{'person_name': 'Joan', 'location': 'USA', 'person_met': 'Victor'},
          {'person_name': 'Victor', 'location': 'Russia', 'person_met': 'Joan'}]

alltext = ""
for person in people:
  alltext += text.format(**person)

或者使用列表推导式。
alltext = [text.format(**person) for person in people]

1
line = """Hi my name is "{0}".
I am from "{1}".
You must be "{2}"."""

tus = (("Joan","USA","Victor"),
       ("Victor","Russia","Joan"))

lf = line.format # <=== wit, direct access to the right method

print '\n\n'.join(lf(*tu) for tu in tus)

结果

Hi my name is "Joan".
I am from "USA".
You must be "Victor".

Hi my name is "Victor".
I am from "Russia".
You must be "Joan".

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接