2010-07-15 17 views
21

¿Cuál es la mejor manera de escribir el contenido de un buffer StringIO en un archivo?¿Cuál es la mejor manera de escribir los contenidos de un StringIO en un archivo?

Actualmente hago algo como:

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

Pero entonces buf.getvalue() haría una copia de los contenidos?

+5

Los objetos 'StringIO' siempre se almacenan en la memoria principal. Si no quiere eso, no use 'StringIO' y escriba directamente en el archivo. – Philipp

+1

@Philipp: Sí, pero usar 'buf.getvalue()' de esta manera podría (?) Crear una copia de los contenidos. – gauteh

Respuesta

37

Uso shutil.copyfileobj:

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

o shutil.copyfileobj (buf, fd, -1) para copiar a partir de un objeto de archivo sin utilizar trozos de tamaño limitado (utilizada para evitar el consumo de memoria no controlada).

+0

Notando que tuve que ejecutar: 'fd.close()' – cooncesean

+8

@cooncesean: eso no debería ser necesario cuando se utiliza la palabra clave 'with'. – gauteh

Cuestiones relacionadas