Каков наилучший способ записи содержимого StringIO в файл?

Каков наилучший способ написать содержимое StringIO буфер в файл?

В настоящее время я делаю что-то вроде:

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

Но потом buf.getvalue () сделал бы копию содержимого?

1 ответ

Решение

Используйте shutil.copyfileobj:

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

или же shutil.copyfileobj (buf, fd, -1) копировать из файлового объекта без использования кусков ограниченного размера (используется, чтобы избежать неконтролируемого потребления памяти).

Python 3:

from io import StringIO
...
with open('file.xml', mode='w') as f:
    print(buf.getvalue(), file=f)

Python 2.x:

from StringIO import StringIO
...
with open('file.xml', mode='w') as f:
    f.write(buf.getvalue())
Другие вопросы по тегам