将StringIO
缓冲区的内容写入文件的最佳方法是什么?将StringIO的内容写入文件的最佳方法是什么?
我现在做这样的事情:
buf = StringIO()
fd = open ('file.xml', 'w')
# populate buf
fd.write (buf.getvalue())
但随后buf.getvalue()
将使内容的副本?
将StringIO
缓冲区的内容写入文件的最佳方法是什么?将StringIO的内容写入文件的最佳方法是什么?
我现在做这样的事情:
buf = StringIO()
fd = open ('file.xml', 'w')
# populate buf
fd.write (buf.getvalue())
但随后buf.getvalue()
将使内容的副本?
with open ('file.xml', 'w') as fd:
buf.seek (0)
shutil.copyfileobj (buf, fd)
或shutil.copyfileobj (buf, fd, -1)
从文件对象复制不使用有限尺寸的块(用于避免不受控制的存储器消耗)。
注意到我必须运行:'fd.close()' – cooncesean 2015-12-03 02:46:36
@cooncesean:使用'with'关键字时不应该这样。 – gauteh 2016-04-20 21:15:18
'StringIO'对象始终存储在主内存中。如果你不想这样做,不要使用'StringIO'并直接写入文件。 – Philipp 2010-07-15 07:18:04
@Philipp:是的,但以这种方式使用'buf.getvalue()'可能会(?)创建内容的副本。 – gauteh 2015-06-30 09:21:04