Python3中r+模式的文件指针与读写位置疑问
Python3 文件打开模式
r+ 细节解析 首先看你给出的r+模式英文说明的中文翻译:
r+
打开文件以进行读写操作。文件指针位于文件开头。
原表述的遗漏点
这份说明遗漏了几个关键细节:
- 文件必须已存在:使用
r+模式时,若目标文件不存在,Python会抛出FileNotFoundError,不会自动创建新文件(这是和w+模式的核心区别之一)。 - 写入为覆盖式操作:写入不会默认追加到文件末尾,而是从当前文件指针位置开始覆盖原有内容。
- 读写共享同一指针:读取和写入共用同一个文件指针,执行读取后指针会停在读取结束的位置,后续写入将从该位置开始,不会自动重置。
读写位置的疑问解答
你的认知有误:r+模式下写入操作默认不在文件末尾执行。初始状态下文件指针在开头,此时写入会直接覆盖文件开头的内容;读取操作确实从初始的文件开头位置开始,但指针会随读取操作移动。
举个实际例子验证:
假设test.txt原有内容为Hello World
with open('test.txt', 'r+') as f: # 初始指针在开头,读取前5个字符 print(f.read(5)) # 输出: Hello # 此时指针位于第5个字符后,写入内容会覆盖后续字符 f.write('Python')
执行后文件内容变为HelloPython,既不是追加到末尾的Hello WorldPython,也不是替换开头的Python World。如果需要在末尾写入,需先执行f.seek(0, 2)将指针移动到文件末尾。
内容的提问来源于stack exchange,提问作者DCR
相关产品推荐
相关产品推荐

