Python文件处理r+模式下文件指针位置疑问:读写结果不符
问题原因解释
核心问题:r+模式下读转写的指针行为
你遇到的现象本质是Python文件操作中r+模式的读写指针规则导致的:
r+模式初始指针确实在文件起始位置(0),执行f.read(5)后,指针理论上停在位置5(对应原内容中"n"的位置)。- 但当读操作后直接执行写操作时,操作系统的文件缓冲机制会默认将指针移动到文件末尾,而非保持在读操作结束的位置。这是因为
r+模式的设计并非默认支持“随机覆盖写入”,如果需要在指定位置写入,必须显式定位指针。
验证与修正
如果需要实现你预期的覆盖效果,必须在写操作前显式调用seek()定位指针:
f = open("hello.txt", "r+") f.read(5) f.seek(5) # 显式将指针移到读操作后的位置 f.write("op") f.close()
执行这段代码后,文件内容会变为你预期的:
pythoopmy world heellll mine
为什么会追加到末尾?
你的原代码中,读操作后没有显式定位指针,系统自动将指针移到文件末尾,所以write("op")的内容被直接追加到了文件最后,导致最终内容为:
python my world heellll mineop
内容的提问来源于stack exchange,提问作者om bahetra
相关产品推荐
相关产品推荐

