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

Python中打开文件可使用的模式都有哪些?

Python open函数文件打开模式汇总及适用场景

基础模式

  • r:只读模式,为open函数的默认模式。适用场景:仅需要读取已有文件内容、不需要修改写入的场景,比如读取配置文件、本地数据文件做分析。要求目标文件必须存在,不存在会抛出FileNotFoundError异常。
  • w:只写模式。适用场景:需要新建文件或者覆盖原有文件全部内容的场景,比如导出新的结果文件、覆盖更新旧配置。如果文件不存在会自动创建,已存在的话会先清空原有内容再写入。
  • a:追加写模式。适用场景:需要在已有文件末尾新增内容、不覆盖原有内容的场景,比如写日志文件、逐步累加记录数据。文件不存在会自动创建,已存在的话直接定位到文件末尾写入。
  • x:独占创建模式。适用场景:仅需要新建文件、要避免覆盖已有文件的场景,比如生成不重名的临时文件。如果目标文件已经存在会直接抛出FileExistsError异常,不存在才会创建并打开供写入。

格式后缀模式

  • b:二进制模式,需要和基础模式搭配使用,比如rb、wb、ab、xb。适用场景:操作非文本类文件,比如图片、音频、视频、二进制数据包、可执行文件等,不会处理编码、换行符等文本类转换。
  • t:文本模式,为默认格式模式,和基础模式搭配时可以省略,比如rt就等价于默认的r。适用场景:操作普通文本类文件,比如txt、json、csv、代码文件等,会自动处理编码、不同操作系统换行符转换等文本相关逻辑。

读写组合模式

搭配+后缀可以实现可读可写的效果,和基础模式组合如下:

  • r+:读写模式。适用场景:需要读取文件内容同时修改部分内容的场景,比如修改文本文件的指定段落。要求文件必须存在,写入时默认从文件指针当前位置开始覆盖内容,不会清空整个文件。
  • w+:读写模式。适用场景:需要新建文件写入后还要读取内容的场景,比如写入测试数据后立刻读取校验。和w特性一致:文件不存在自动创建,已存在则先清空全部内容。
  • a+:追加读写模式。适用场景:追加写的同时需要读取文件内容的场景,比如写日志的同时要读取历史日志内容。打开时文件指针默认在末尾,写操作永远会追加到末尾,不会覆盖原有内容,读取需要手动调用seek()方法移动指针到文件开头。
  • x+:独占创建读写模式。适用场景:新建文件后需要立刻读取的场景,可避免覆盖已有文件,目标文件已存在就会报错。
示例代码问题分析与修正

你给出的示例代码如下:

f = open("demofile.txt", "r")
f.write("Something")

存在的问题

  1. 核心运行错误:使用r只读模式打开文件,调用write()执行写入操作会直接抛出io.UnsupportedOperation: not writable异常,只读模式不支持写入操作。
  2. 隐性资源问题:打开文件后没有手动调用close()方法关闭文件,会导致文件资源泄漏,长时间运行可能出现文件被占用无法修改、系统文件句柄耗尽的问题。

修正方案

推荐优先使用with上下文管理器,会自动处理文件关闭逻辑,无需手动调用close(),根据你的使用场景可选不同修正方案:

场景1:需要覆盖写入文件内容

with open("demofile.txt", "w") as f:
    f.write("Something")

场景2:需要在已有文件末尾追加内容

with open("demofile.txt", "a") as f:
    f.write("Something")

场景3:需要读取文件同时修改内容(要求文件已存在)

with open("demofile.txt", "r+") as f:
    # 可先读取原有内容
    content = f.read()
    # 移动指针到需要写入的位置再执行写操作
    f.seek(0)
    f.write("Something")

内容的提问来源于stack exchange,提问作者NotTadej

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.03 17:24:01