奇怪的文件搜寻行为

时间:2019-09-02 11:09:13

标签: python

关于下面的两个交互,我希望两者都输出相同的文件,但是第二个在文件末尾写入。唯一的区别是写入后的读取语句,我不知道发生了什么。我想念什么?

预期行为:

>>> f = open("test.txt","w+")
>>> f.write('0123456789')
10
>>> f.seek(0)
0
>>> f.read(3)
'012'
>>> f.seek(0,1)
3
>>> f.write('XX')
2
>>> f.seek(0)
0
>>> f.read()
'012XX56789'
>>> f.close()

异常行为:

>>> f = open("test.txt","w+")
>>> f.write('0123456789')
10
>>> f.seek(0)
0
>>> f.read(3)
'012'
>>> f.seek(0,1)
3
>>> f.write('XX')
2
>>> f.read(2)
'34'
>>> f.seek(0)
0
>>> f.read()
'0123456789XX'
>>> f.close()

您可以看到XX是在整行之后写的,而我在写这些字符时处于位置3。

1 个答案:

答案 0 :(得分:3)

发生的事情是write已被缓冲,并且中间的read在提交(取消)写入之前将基础文件位置提升到文件的末尾(因为它很小)。如果写操作之后是seek,则在实际查找之前将写缓冲区提交到正确的位置。这种方法避免了每次读取以检查挂起的写入的开销,并且长期以来一直specified by POSIX