54

StringIO将缓冲区内容写入文件的最佳方法是什么?

我目前正在做类似的事情:

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

但随后buf.getvalue()会复制内容吗?

4

2 回答 2

84

使用shutil.copyfileobj

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

shutil.copyfileobj(buf, fd, -1)从文件对象复制而不使用有限大小的块(用于避免不受控制的内存消耗)。

于 2010-07-15T08:36:22.717 回答
8

蟒蛇 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())
于 2019-10-28T18:22:48.537 回答