【问题标题】:Differences between write and tempfile.writewrite 和 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() 将删除临时文件。如果您愿意说明,我会接受。

标签: python file


【解决方案1】:

我认为您遇到了内部写入缓冲区大小。在第一种情况下,您在调用os.stat 之前.close() 文件,这有效地刷新了内部缓冲区。在第二种情况下(使用tempfile),当您调用os.stat 时,文件仍然处于打开状态。由于该文件仍处于打开状态,因此其中一些可能仍会缓冲在内存中,直到您明确地flush 或关闭它。

【讨论】:

    猜你喜欢
    • 2014-12-24
    • 2016-04-02
    • 2015-04-21
    • 2010-12-19
    • 2014-01-31
    • 1970-01-01
    • 1970-01-01
    • 2011-10-22
    • 2013-06-20
    相关资源
    最近更新 更多