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
相关产品推荐
相关产品推荐

