Python中文件模式r+与w+的区别是什么?
Python 文件模式
r+ 与 w+ 的核心区别 在Python中操作文件时,r+和w+都支持读写操作,但二者在文件存在性处理、内容保留、指针行为上有本质区别,具体如下:
1. 文件存在与否的处理逻辑
r+:仅能打开已存在的文件,如果目标文件不存在,直接抛出FileNotFoundError错误。w+:如果目标文件不存在,会自动创建新文件;如果文件已存在,会直接清空原有全部内容,相当于先执行了一次覆盖写入的初始化操作。
2. 原有文件内容的保留情况
r+:打开文件后,原有内容完全保留。你可以先读取全部或部分内容,再在指定位置写入(写入会覆盖指针位置开始的对应长度内容)。w+:打开文件的瞬间,原有内容就被清空了——哪怕你只打开文件不做任何写入操作,原文件的内容也会丢失。
3. 文件指针的初始位置与读取行为
r+:打开后文件指针默认指向文件开头,可以直接调用read()读取原有内容。w+:打开后指针同样在开头,但此时文件内容已被清空,直接read()会得到空字符串;如果写入内容后需要读取,必须手动通过seek(0)将指针移回开头。
代码示例对比
用r+操作已有文件
# 假设test.txt初始内容:"Hello, StackOverflow" with open("test.txt", "r+") as f: # 读取全部内容 original_content = f.read() print(original_content) # 输出: Hello, StackOverflow # 指针移回开头,写入新内容(覆盖对应长度) f.seek(0) f.write("Hi") # 此时文件内容变为: Hi, StackOverflow
用w+操作已有文件
# 假设test.txt初始内容:"Hello, StackOverflow" with open("test.txt", "w+") as f: # 直接读取得到空内容 empty_content = f.read() print(empty_content) # 输出: 空字符串 # 写入新内容 f.write("Python File Modes") # 指针现在在内容末尾,需移回开头才能读取 f.seek(0) new_content = f.read() print(new_content) # 输出: Python File Modes # 原文件的"Hello, StackOverflow"已完全丢失
内容的提问来源于stack exchange,提问作者Satya Shreya
相关产品推荐
相关产品推荐

