You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python r+模式下write后文件指针异常跳转的原因及文档查询

Python文件IO r+模式下读写指针异常行为探究

问题背景

自学Python文件IO操作时,研究open函数的不同模式及同一文件对象的读写逻辑,遇到了不符合预期的代码行为。

初始测试代码

with open('blah.txt', 'w') as f:
    # 创建包含13个字符的文件
    f.write("hello, world!")

with open('blah.txt', 'r+') as f:
    for i in range(5):
        # 写入一个字符
        f.write(str(i))
        # 打印当前指针位置和后续3个字符
        print(f"{f.tell()}: ", f"{f.read(3)}")

with open('blah.txt', 'r') as f:
    # 查看文件最终内容
    print(f.read())

初始输出结果

1:  ell
14:  
15:  
16:  
17:  
0ello, world!1234

预期与实际差异

第一个字符被0覆盖、读取后续ell符合预期,但原本预期第二次写入的1会覆盖hello中的o,随后读取的3个字符是, w;实际却是第二次写入后指针直接跳至文件末尾,后续读取内容为空,最终文件内容为0ello, world!1234。

进一步验证测试

为了定位原因,修改代码进行测试:

with open('blah.txt', 'w') as f:
    # 创建包含13个字符的文件
    f.write("hello, world!")

with open('blah.txt', 'r+') as f:
    for i in range(3):
        # 写入一个字符
        f.write(str(i))
        # 打印当前指针位置和后续3个字符
        print(f"{f.tell()}: ", f"{f.read(3)}")
        print(f"{f.tell()}: ", f"{f.read(3)}")

with open('blah.txt', 'r') as f:
    # 查看文件最终内容
    print(f.read())

验证输出结果

1:  ell
4:  o, 
14:  
14:  
15:  
15:  
0ello, world!12

关键发现

并非第一次read操作导致指针跳至末尾,而是第二次write操作直接将指针跳转至文件末尾,导致后续读写都在文件尾部进行。已查阅Python官方IO教程文档,但未找到该行为的明确解释,希望获取官方文档中对应行为的说明链接。

内容的提问来源于stack exchange,提问作者Joe

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.03 16:19:59