2013-04-23 11 views
5

Al momento sto scrivendo un file a più linea da un programma Python facendoCome scrivere facilmente un file multilinea con variabili (python 2.6)?

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() 

Questo è un po 'faticoso e soggetto a errori di battitura. Quello che mi piacerebbe essere in grado di fare è qualcosa di simile

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() 

C'è un modo di fare la cosa del genere all'interno di pitone? Un trucco potrebbe essere quello di scriverlo su un file e quindi utilizzare la sostituzione mirata, ma c'è un modo più semplice?

+0

è 'npeople' davvero un galleggiante o essere uscita come un galleggiante, rispettivamente? Lo sto chiedendo per l'identificatore di formato '{0: 5.2f}'. – cyroxx

+0

Buon punto, ma non preoccuparti: la mia gente può essere frazionata :) – Tetsuo

risposta

26

stringhe triple virgolette sono tuo amico:

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

Bella soluzione pulita. Una cosa: per quanto riguarda l'identificatore di formato '{0: 5.2f}'? – cyroxx

+0

Grazie, è molto utile. Manca solo il mio identificatore di formato 5.2f - Altrimenti sembra perfetto. – Tetsuo

+0

@Tetsuo: aggiunto lo specificatore del formato;) –