Каков наилучший способ записи содержимого 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())