为何Python中r+模式读写混合不符合预期,rb+模式却正常?
文本与二进制模式下文件读写的差异疑问
Python中以文本模式读取文件时,数据会被加载到缓冲区中,这意味着在读写切换时必须执行seek操作才能正确写入内容。
假设目标文件test.txt的初始内容为:
Hi, I'm a text file! I got a text file here.
文本模式下的读写操作
如果要读取第一行后替换第二行内容,必须在写入前执行seek操作才能确保写入位置正确:
import os with open("test.txt", "r+") as f: print(f.readline().strip()) print('Replacing bytes at position', f.tell()) f.seek(0, os.SEEK_CUR) f.write('I had')
二进制模式下的读写操作
但如果以二进制模式打开文件,无需执行seek就能正常完成写入:
with open("test.txt", "rb+") as f: print(f.readline().strip()) print('Replacing bytes at position', f.tell()) f.write(b'I had')
核心疑问
- 二进制模式下无需
seek即可正常工作的情况是否符合预期? - 后续在进行更多读写操作或处理大文件时,是否会出现潜在问题?
- 为何二进制模式不需要
seek就能正确完成读写切换?
内容的提问来源于stack exchange,提问作者giusti
相关产品推荐
相关产品推荐

