2014-02-18 27 views
3

我有一個多行字符串,我想用自己的變量改變它的某些部分。我真的不喜歡用+運算符拼湊相同的文本。有更好的選擇嗎?在Python中格式化多行字符串的最優雅的方式

例如(內部引號是必需的):

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) 

回答

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方法中。

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". 
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] 
相關問題