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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.09 02:50:33