【问题标题】:Weird behavior when writing and reading file写入和读取文件时的奇怪行为
【发布时间】:2012-10-26 08:12:04
【问题描述】:

执行以下代码时,在第二次读取后,文件会被零填充,直到 4096 字节大。我不知道为什么:

f = open("file.txt", "w+")
f.read()
# gives ''
f.write("Hello")
f.read()
# filled with \x00,\x00
f.close()
# file is 4096 bytes large...

【问题讨论】:

  • 如何测量文件的大小?
  • 我的机器上没有得到结果,你的平台是什么?
  • 我认为你不能在write() 之后没有flush() 之间的read()
  • 哪个操作系统?和 Marcus 一样,我无法在 Linux、x86-64 上重现它。

标签: python python-2.7


【解决方案1】:

解决问题的最佳方法:不要混用 read()write()

否则:在write() 之后,在第二个read() 之前使用seek() 从头开始​​读取您的文件

f = open("file.txt", "w+")
print f.read()      # prints ''
f.write("Hello")
f.seek(0)
print f.read()      # print 'Hello'
f.close()

【讨论】:

  • @PaoloMoretti 是的。另请注意,OP 代码的行为取决于您使用的操作系统/文件系统。虽然代码可能在带有 Ext3/Ext4 的 Linux 上运行,但在带有 NTFS 的 Win7 上使用它会导致将一堆垃圾写入文件。
【解决方案2】:

这可能与文件系统和/或分区有关。我没有完全了解细节,但很可能 4096 字节(即正好 4Kb)是文件系统和分区中文件的最小大小。 AFAIK,分区有一个块大小(通常为 4096 字节),文件只能分配给整个块。所以一个文件总是4096字节的倍数。我认为某些文件系统可以通过组合小文件来解决这个问题(例如 reiserfs)。

【讨论】:

    猜你喜欢
    • 2016-12-15
    • 2013-11-27
    • 1970-01-01
    • 2011-11-12
    • 2017-01-19
    • 2012-12-02
    • 1970-01-01
    • 1970-01-01
    • 2020-03-26
    相关资源
    最近更新 更多