python10天- 文件操作模式详解

部署运行你感兴趣的模型镜像

Python 中的文件操作模式决定了如何打开和操作文件。通过 open() 函数的 mode 参数指定模式,可以控制文件的读写行为。以下是 Python 文件操作模式的详细解释,包括常见模式、特点、使用场景和示例代码。


1. 基础模式

1.1 'r' - 只读模式(默认模式)
  • 说明:以只读方式打开文件。
  • 特点
    • 文件必须存在,否则会抛出 FileNotFoundError
    • 打开后可以读取文件内容,但不能写入。
    • 文件指针(读写位置)会定位到文件开头。
  • 使用场景:仅需读取文件内容。
  • 示例
    with open("file.txt", "r") as f:
        content = f.read()
        print(content)
    

1.2 'w' - 写入模式(覆盖写入)
  • 说明:以写入方式打开文件,若文件不存在则创建。
  • 特点
    • 如果文件已存在,会清空文件内容
    • 文件指针定位到文件开头。
    • 只能写入(write()),不能读取。
  • 使用场景:需要覆盖或新建文件并写入内容。
  • 示例
    with open("new_file.txt", "w") as f:
        f.write("Hello, World!")
    

1.3 'a' - 追加模式
  • 说明:以追加方式打开文件,若文件不存在则创建。
  • 特点
    • 文件指针定位到文件末尾,新写入的内容会追加到文件末尾。
    • 如果文件已存在,不会清空原有内容
    • 只能写入(write()),不能读取。
  • 使用场景:需要向文件末尾追加内容(如日志记录)。
  • 示例
    with open("log.txt", "a") as f:
        f.write("\nNew log entry added.")
    

2. 扩展模式(组合模式)

2.1 'r+' - 读写模式
  • 说明:以读写方式打开文件。
  • 特点
    • 文件必须存在,否则会抛出 FileNotFoundError
    • 文件指针在开头,可以读取和写入。
    • 写入会覆盖原有内容,需注意文件指针的位置。
  • 使用场景:需要同时读取和修改文件内容。
  • 示例
    with open("data.txt", "r+") as f:
        content = f.read()  # 读取内容
        f.write("Appended text")  # 写入内容(覆盖当前位置后的内容)
        # 需要使用 seek() 调整指针位置以避免覆盖
    

2.2 'w+' - 覆盖读写模式
  • 说明:以读写方式打开文件,若文件存在则清空,否则创建新文件。
  • 特点
    • 文件指针定位到开头。
    • 可读可写,但写入会覆盖原有内容。
  • 使用场景:需要重写或创建文件并读取内容。
  • 示例
    with open("data.txt", "w+") as f:
        f.write("New content")  # 写入内容
        f.seek(0)  # 将指针移到开头以读取
        content = f.read()
        print(content)
    

2.3 'a+' - 追加读写模式
  • 说明:以读写方式打开文件,若不存在则创建,以追加方式写入。
  • 特点
    • 文件指针在文件末尾,写入会追加到末尾。
    • 可以读取文件内容,但读取时需调整指针位置(如 seek(0))。
  • 使用场景:需要追加内容并读取文件。
  • 示例
    with open("log.txt", "a+") as f:
        f.write("\nNew entry")  # 追加内容
        f.seek(0)  # 移动指针到开头以读取整个文件
        content = f.read()
        print(content)
    

3. 二进制模式(适用于非文本文件)

所有模式后加 'b' 表示以二进制模式打开文件,适用于处理图片、可执行文件等非文本数据。

3.1 'rb' - 二进制只读
  • 说明:以二进制模式读取文件。
  • 特点
    • 文件必须存在。
    • 读取返回字节(bytes)类型数据。
  • 使用场景:读取二进制文件(如 .jpg, .exe)。
  • 示例
    with open("image.jpg", "rb") as f:
        image_data = f.read()  # 返回 bytes 类型
    

3.2 'wb' - 二进制覆盖写入
  • 说明:以二进制模式写入文件,覆盖原有内容。
  • 使用场景:写入二进制数据(如保存图片)。
  • 示例
    with open("output.jpg", "wb") as f:
        f.write(b'\x89PNG\r\n\x1a\n\x00\x00\x00\rIHDR\x00\x00')  # 写入字节数据
    

3.3 'ab' - 二进制追加
  • 说明:以二进制模式追加写入。
  • 使用场景:追加二进制数据(如日志文件)。
  • 示例
    with open("binary_data.bin", "ab") as f:
        f.write(b'\x01\x02\x03')  # 追加字节数据
    

4. 独占创建模式 'x'

4.1 'x' - 新建文件写入
  • 说明:如果文件不存在,以写入方式创建;如果文件已存在,抛出 FileExistsError
  • 特点
    • 安全创建文件,避免覆盖已有文件。
    • 只能写入,不能读取。
  • 使用场景:需要确保文件未被创建时写入。
  • 示例
    try:
        with open("new_file.txt", "x") as f:
            f.write("This file is newly created.")
    except FileExistsError:
        print("File already exists!")
    

5. 组合模式(其他扩展)

  • 'xb':以二进制模式新建文件,若文件存在则报错。
    with open("new_binary_file.bin", "xb") as f:
        f.write(b'\x00\x01')
    

6. 总结表格

模式描述读权限写权限创建文件覆盖内容指针位置适用场景
'r'只读×××文件开头读取现有文件
'w'写入(覆盖)×文件开头创建或重写文件
'a'追加××文件末尾追加内容到文件末尾
'r+'读写(文件必须存在)××文件开头修改现有文件内容
'w+'读写(覆盖)文件开头重写文件并读取
'a+'读写(追加写入)×(追加)文件末尾(写入时)追加并读取文件
'rb'二进制只读×××文件开头处理二进制文件(如图片)
'wb'二进制覆盖写入×文件开头写入二进制数据
'ab'二进制追加××文件末尾追加二进制数据
'x'独占创建写入××文件开头安全创建新文件

7. 注意事项

  1. 文件关闭

    • 总是用 with open(...) as f 语句,它会自动关闭文件(即使发生异常)。
    • 如果手动打开文件,务必调用 f.close()
  2. 指针位置

    • 写入时,文件指针的位置会影响写入内容的位置(如 'a' 模式指针在末尾)。
  3. 文本 vs 二进制

    • 文本模式(如 'r'):自动处理换行符(\n 转换为系统特定的换行符,如 Windows 的 \r\n)。
    • 二进制模式(如 'rb'):直接读取原始字节,不处理换行符。
  4. 异常处理

    • 文件不存在时,'r', 'r+' 会抛出 FileNotFoundError
    • 文件已存在时,'x' 会抛出 FileExistsError

8. 示例代码

示例1:读取文件
with open("data.txt", "r") as f:
    for line in f:
        print(line.strip())
示例2:写入并追加
# 写入
with open("log.txt", "w") as f:
    f.write("Initial content\n")

# 追加
with open("log.txt", "a") as f:
    f.write("Added content\n")
示例3:二进制读写
# 写入二进制数据
with open("binary.dat", "wb") as f:
    f.write(b'\x00\x01\x02\x03')

# 读取二进制数据
with open("binary.dat", "rb") as f:
    data = f.read()
    print(data)  # 输出:b'\x00\x01\x02\x03'

通过合理选择文件模式,可以精确控制文件的读写行为,避免数据丢失或意外覆盖。建议优先使用 with 语句管理文件,确保资源正确释放。

您可能感兴趣的与本文相关的镜像

Python3.10

Python3.10

Conda
Python

Python 是一种高级、解释型、通用的编程语言,以其简洁易读的语法而闻名,适用于广泛的应用,包括Web开发、数据分析、人工智能和自动化脚本

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值