2010-07-15 13 views
21

Was ist der beste Weg, um den Inhalt eines StringIO Buffers in eine Datei zu schreiben?Was ist der beste Weg, um den Inhalt eines StringIO in eine Datei zu schreiben?

ich zur Zeit so etwas wie:

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

Aber dann buf.getvalue() würde eine Kopie des Inhalts machen?

+5

'StringIO' Objekte werden immer im Hauptspeicher gespeichert. Wenn Sie das nicht wollen, verwenden Sie nicht 'StringIO' und schreiben Sie direkt in die Datei. – Philipp

+1

@Philipp: Ja, aber die Verwendung von 'buf.getvalue()' auf diese Weise könnte (?) Eine Kopie des Inhalts erstellen. – gauteh

Antwort

37

Verwendung shutil.copyfileobj:

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

oder shutil.copyfileobj (buf, fd, -1) aus einem Datei-Objekt zu kopieren, ohne Klumpen von begrenzten Größe (zur Vermeidung unkontrollierten Speicherverbrauches) verwendet wird.

+0

Beachten Sie, dass ich ausführen musste: 'fd.close()' – cooncesean

+8

@cooncesean: das sollte nicht notwendig sein, wenn Sie das Schlüsselwort 'with' verwenden. – gauteh

Verwandte Themen