记录Python `open()`内置函数模式

以下是 Python open() 函数所有文件模式的完整总结表,涵盖读、写、覆盖、追加行为和适用场景:

模式 覆盖(清空) 追加 二进制 适用场景
r ✔️ 只读现有文件。
r+ ✔️ ✔️ 局部覆盖 读写现有文件,可修改任意位置的内容(不自动清空文件)。
w ✔️ 全部覆盖 创建新文件或清空并写入旧文件。
w+ ✔️ ✔️ 全部覆盖 读写模式,清空文件后从头写入(适合完全重写内容并读取)。
a ✔️ ✔️ 追加写入,文件不存在则创建。
a+ ✔️ ✔️ ✔️ 追加写入并支持读取历史数据(需手动移动指针)。
x ✔️ 独占创建新文件,若文件已存在则报错。
rb ✔️ ✔️ 以二进制模式只读现有文件(如图片、音频等)。
rb+ ✔️ ✔️ 局部覆盖 ✔️ 二进制读写现有文件,可修改任意位置的内容。
wb ✔️ 全部覆盖 ✔️ 二进制模式覆盖写入或创建新文件(如写入二进制数据)。
wb+ ✔️ ✔️ 全部覆盖 ✔️ 二进制读写模式,清空文件后从头写入(适合完全重写二进制数据并读取)。
ab ✔️ ✔️ ✔️ 二进制模式追加写入(如日志文件追加二进制数据)。
ab+ ✔️ ✔️ ✔️ ✔️ 二进制模式追加写入并支持读取历史数据(需移动指针)。
xb ✔️ ✔️ 二进制模式独占创建新文件,若文件存在则报错。

关键说明

  1. 覆盖(清空)
    • w/w+/wb/wb+:打开文件时立即清空内容。
    • r+/rb+:写入时仅覆盖当前指针位置的数据(需手动控制)。
    • a/a+/ab/ab+:始终追加写入,不覆盖原有内容。
  2. 追加
    • a/a+/ab/ab+:写入内容始终追加到文件末尾,即使手动移动指针也会强制回到末尾。
  3. 二进制模式
    • b 的模式(如 rbwb+)用于处理二进制数据(非文本文件)。
    • 不带 b 的默认模式是文本模式(自动处理编码,如 utf-8)。
  4. 适用场景
    • r+/rb+ :修改文件中间部分(如配置文件更新)。
    • w+/wb+ :完全重写文件内容(如生成新数据并需要读取)。
    • a+/ab+ :日志文件追加(同时支持读取历史记录)。
    • x/xb :确保文件不存在时安全创建(避免意外覆盖)。

示例代码

1. r+ 模式(修改文件局部内容)

with open("data.txt", "r+") as f:
    f.seek(5)  # 移动到第5字节
    f.write("Python")  # 覆盖从第5字节开始的内容

2. a+ 模式(追加并读取历史内容)

with open("log.txt", "a+") as f:
    f.write("New log entry\n")
    f.seek(0)  # 移动指针到开头
    print(f.read())  # 读取全部日志内容

3. wb+ 模式(读写二进制文件)

with open("image.png", "wb+") as f:
    f.write(b"\x89PNG\x0D\x0A\x1A\x0A")  # 写入PNG文件头
    f.seek(0)
    header = f.read(8)  # 读取文件头验证
    print(header)  # 输出: b'\x89PNG\r\n\x1a\n'

注意事项

  • w/w+ 会清空文件:使用前确认文件内容无需保留。
  • 指针控制:读写混合操作时,用 seek() 精确控制指针位置。
  • 文件编码:文本模式需指定 encoding 参数(如 open("file.txt", "r", encoding="utf-8"))。
  • 异常处理x/xb 模式需捕获 FileExistsError 异常。

根据需求选择合适模式,避免数据丢失或逻辑错误! 🚀

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容