对于下面的两次交互,我希望两者输出相同的文件,但第二个交互写入文件末尾。唯一的区别是写入后的读取语句,我不明白发生了什么。我缺少什么?
预期行为:
>>> 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
被写after整行,而我在写这些字符时处于位置 3。
发生的事情是write
被缓冲,并且干预read
在提交写入(刷新)之前将底层文件位置提前到文件末尾(因为它很小)。如果接下来的 write 是seek
,在实际查找之前将写入缓冲区提交(到正确的位置)。这种方法避免了每次读取时检查待处理写入的开销,并且长期以来一直被采用由 POSIX 指定 http://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)