write 和 tempfile.write 之间的区别
Posted
技术标签:
【中文标题】write 和 tempfile.write 之间的区别【英文标题】:Differences between write and tempfile.write 【发布时间】:2014-02-21 11:04:13 【问题描述】:请解释以下内容:
def feed(data):
import os
print "DATA LEN: %s" % len(data)
f = open("copy", "w")
f.write(data)
f.close()
print "FILE LEN: %s" % os.stat("copy").st_size
t = tempfile.NamedTemporaryFile()
t.write(data)
print "TEMP LEN: %s" % os.stat(t.name).st_size
t.close()
feed(x)
DATA LEN: 11004
FILE LEN: 11004
TEMP LEN: 8192
为什么会有差异,我可以修复温度吗?结尾好像被砍了。
在 2.6、2.7 上测试
【问题讨论】:
我可以在文档中发现的唯一区别似乎是,在 Windows 上,您必须附加一个“b”才能打开,因为 Windows 区分二进制和非二进制,并且 tempfile 自动调用“w +b"。 如果你在stat
之前.flush()
(或.close()
)会发生什么?
宾果游戏!谢谢你。 .flush() 解决了这个问题。 .close() 将删除临时文件。如果您愿意说明,我会接受。
FWIW,I've seen this magic number (8192) before ...
【参考方案1】:
我认为您遇到了内部写入缓冲区大小。在第一种情况下,您在调用os.stat
之前.close()
文件,这有效地刷新了内部缓冲区。在第二种情况下(使用tempfile
),当您调用os.stat
时,文件仍然处于打开状态。由于该文件仍处于打开状态,因此其中一些可能仍会缓冲在内存中,直到您明确地flush
或关闭它。
【讨论】:
以上是关于write 和 tempfile.write 之间的区别的主要内容,如果未能解决你的问题,请参考以下文章
read() 和 recv() 以及 send() 和 write() 之间有啥区别?
`nx 受影响:lint --fix` 和 `nx format:write` 之间的区别
python unicode处理print和sys.stdout.write之间的差异