2010-07-15 16 views
21

Qual è il modo migliore per scrivere il contenuto di un buffer StringIO in un file?Qual è il modo migliore per scrivere il contenuto di un StringIO in un file?

Io attualmente faccio qualcosa di simile:

buf = StringIO() 
fd = open ('file.xml', 'w') 
# populate buf 
fd.write (buf.getvalue()) 

Ma poi buf.getvalue() vorrei fare una copia del contenuto?

+5

Gli oggetti 'StringIO' sono sempre memorizzati nella memoria principale. Se non lo vuoi, non usare 'StringIO' e scrivi direttamente nel file. – Philipp

+1

@Philipp: Sì, ma l'uso di 'buf.getvalue()' in questo modo potrebbe (?) Creare una copia dei contenuti. – gauteh

risposta

37

Uso shutil.copyfileobj:

with open ('file.xml', 'w') as fd: 
    buf.seek (0) 
    shutil.copyfileobj (buf, fd) 

o shutil.copyfileobj (buf, fd, -1) copiare da un oggetto file senza utilizzare pezzi di dimensioni limitate (usato per evitare il consumo di memoria incontrollato).

+0

Notando che ho dovuto eseguire: 'fd.close()' – cooncesean

+8

@cooncesean: che non dovrebbe essere necessario quando si utilizza la parola chiave 'with'. – gauteh

Problemi correlati