2013-04-23 7 views
5

Im Moment schreibe ich eine mehrzeilige Datei aus einem Python-Programm vonWie schreibt man einfach eine mehrzeilige Datei mit Variablen (Python 2.6)? Das ist ein bisschen ermüdend und vorbehaltlich Tippfehler

myfile = open('out.txt','w') 
myfile.write('1st header line\nSecond header line\n') 
myfile.write('There are {0:5.2f} people in {1} rooms\n'.format(npeople,nrooms)) 
myfile.write('and the {2} is {3}\n'.format('ratio','large')) 
myfile.close() 

tun. Was ich möchte in der Lage sein zu tun, so etwas wie

myfile = open('out.txt','w') 
myfile.write(
1st header line 
Second header line 
There are {npeople} people in {nrooms} rooms 
and the {'ratio'} is {'large'}' 
myfile.close() 

Gibt es eine Möglichkeit, die so etwas wie dies in Python zu tun? Ein Trick könnte sein, es in eine Datei zu schreiben und dann sed targeted replacement zu verwenden, aber gibt es einen einfacheren Weg?

+0

Ist 'npeople' wirklich ein Schwimmer bzw. Ausgang als Schwimmer sein? Ich frage wegen des Formatbezeichners '{0: 5.2f}'. – cyroxx

+0

Guter Punkt, aber keine Sorge - meine Leute können fraktional sein :) – Tetsuo

Antwort

26

Triple Strings in Anführungszeichen sind Freundes:

template = """1st header line 
second header line 
There are {npeople:5.2f} people in {nrooms} rooms 
and the {ratio} is {large} 
""" 
context = { 
"npeople":npeople, 
"nrooms":nrooms, 
"ratio": ratio, 
"large" : large 
} 
with open('out.txt','w') as myfile: 
    myfile.write(template.format(**context)) 
+0

Schöne, saubere Lösung. Eine Sache: Was ist mit dem Formatbezeichner '{0: 5.2f}'? – cyroxx

+0

Danke, das ist sehr hilfreich. Es fehlt nur mein 5.2f Format-Spezifizierer - Sonst scheint es perfekt. – Tetsuo

+0

@Tetsuo: Format-Spezifizierer hinzugefügt;) –