【问题标题】:FileObject read works like writeFileObject 读取的工作方式与写入类似
【发布时间】:2011-12-12 12:35:17
【问题描述】:

让我们看一段简单的代码:

import os

f = open('test.bin', 'wb')
f.write('X')
f.close()
# test.bin - X

f = open('test.bin', 'r+b')

f.seek(0, os.SEEK_END)
f.write('AB')
# test.bin - XAB

f.seek(0, os.SEEK_SET)
f.write('Y')
# test.bin - YAB

print f.read(1)
# test.bin - YBB and prints B 0_o whhyyy?

f.close()

为什么在这种情况下 read 方法像 write 一样工作??
我使用 Python 2.5 和 2.7 for windows 从官方网站下载。

【问题讨论】:

  • 在linux上使用python 2.6时,test.bin末尾包含YAB,最后一次读取返回A。但是,Windows 上的 python 2.6 会导致 YBB 并且最后一次读取返回 B
  • 很奇怪,有什么想法吗?
  • 我似乎记得由于fopen() 函数(调用 windows @987654329 @在引擎盖下)。不幸的是,我再也找不到我的源了...最终尝试使用模式'w+b'打开文件。

标签: python file-io seek


【解决方案1】:

如果你放

f.flush()

在您写入“Y”之后,后续的 read(1) 会读取正确的值(在本例中为“A”)。

所以我的猜测是,在 Windows 上 read() 不会强制缓冲区刷新,而在 *nix 上会。

【讨论】:

    猜你喜欢
    • 2015-01-19
    • 2012-08-06
    • 1970-01-01
    • 2011-06-18
    • 2012-01-27
    • 2020-03-29
    • 2018-10-02
    • 2015-05-19
    • 1970-01-01
    相关资源
    最近更新 更多