2010-07-15 46 views
21

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

我现在做这样的事情:

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

但随后buf.getvalue()将使内容的副本?

+5

'StringIO'对象始终存储在主内存中。如果你不想这样做,不要使用'StringIO'并直接写入文件。 – Philipp 2010-07-15 07:18:04

+1

@Philipp:是的,但以这种方式使用'buf.getvalue()'可能会(?)创建内容的副本。 – gauteh 2015-06-30 09:21:04

回答

37

shutil.copyfileobj使用:

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

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

+0

注意到我必须运行:'fd.close()' – cooncesean 2015-12-03 02:46:36

+8

@cooncesean:使用'with'关键字时不应该这样。 – gauteh 2016-04-20 21:15:18

相关问题