2010-07-15 2 views
21

Quelle est la meilleure façon d'écrire le contenu d'un tampon StringIO dans un fichier?Quelle est la meilleure façon d'écrire le contenu d'un StringIO dans un fichier?

Je fais actuellement quelque chose comme:

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

Mais buf.getvalue() voudrais faire une copie du contenu?

+5

Les objets 'StringIO' sont toujours stockés dans la mémoire principale. Si vous ne le souhaitez pas, n'utilisez pas StringIO et écrivez directement dans le fichier. – Philipp

+1

@Philipp: Oui, mais utiliser 'buf.getvalue()' de cette façon pourrait (?) Créer une copie du contenu. – gauteh

Répondre

37

utilisation shutil.copyfileobj:

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

ou shutil.copyfileobj (buf, fd, -1) pour copier à partir d'un objet de fichier sans utiliser des morceaux de taille limitée (utilisé pour éviter la consommation de mémoire non contrôlée).

+0

En notant que je devais exécuter: 'fd.close()' – cooncesean

+8

@cooncesean: cela ne devrait pas être nécessaire lors de l'utilisation du mot clé 'with'. – gauteh

Questions connexes