深入 Python 文件操作:编码、读写与追加的全解析

一、文件编码:计算机的 "语言翻译官"

在计算机世界中,所有数据最终都以0和1的二进制形式存储。但人类需要更直观的表示方式,文件编码就是连接二者的桥梁。

常见编码格式

  • ASCII:最早的单字节编码,仅支持英文和符号(128 个字符)
  • UTF-8:Unicode 的可变长编码,兼容 ASCII,支持全球语言(Python3 默认编码)
  • GBK:中文常用编码,双字节存储中文字符

Python 中的编码处理

当使用open()函数时,通过encoding参数指定编码:

# 读取UTF-8编码的文本
with open("data.txt", "r", encoding="utf-8") as f:
    content = f.read()

# 写入GBK编码的文件
with open("output.txt", "w", encoding="gbk") as f:
    f.write("你好,世界!")

二、文件读取:从磁盘到内存的桥梁

基础操作模式

模式 说明 示例
r 只读(默认) open("file.txt", "r")
rb 二进制只读 open("image.png", "rb")
r+ 读写(指针从头开始) open("data.txt", "r+")

读取方法对比

1. 一次性读取全部内容

with open("log.txt", "r") as f:
    all_text = f.read()  # 适合小文件

2. 逐行读取(推荐大文件)

with open("large_file.txt", "r") as f:
    for line in f:  # 内存友好型方式
        print(line.strip())

3. 按字节读取二进制文件

with open("video.mp4", "rb") as f:
    chunk = f.read(1024)  # 每次读取1KB
    while chunk:
        process(chunk)
        chunk = f.read(1024)

三、文件写入:从内存到磁盘的持久化

写入模式详解

模式 说明 注意事项
w 覆盖写入(文件不存在则创建) 会清空原有内容
wb 二进制写入 用于图片、音频等非文本文件
w+ 读写模式(覆盖写入) 慎用,避免数据丢失

文本写入示例

# 写入多行文本
lines = ["第一行\n", "第二行\n", "第三行\n"]
with open("output.txt", "w") as f:
    f.writelines(lines)  # 比多次f.write更高效

二进制写入示例

# 保存图片数据
with open("download.jpg", "wb") as f:
    f.write(requests.get("https://example.com/image.jpg").content)

四、追加写入:数据的增量存储

追加模式a

使用a模式时,文件指针会指向末尾,新内容将添加到文件尾部:

# 追加日志信息
with open("app.log", "a") as f:
    f.write(f"[{datetime.now()}] 用户登录\n")

二进制追加模式ab

# 合并视频片段
with open("movie.mp4", "ab") as f:
    f.write(new_video_chunk)

五、最佳实践与注意事项

  1. 始终使用with语句:自动管理文件关闭,避免资源泄漏

  2. 明确指定编码:防止出现UnicodeDecodeError或乱码

  3. 模式组合技巧:

    • r+:读写模式(需手动控制指针位置)
    • a+:追加并读取(常用于日志分析)
  4. 异常处理

    try:
        with open("test.txt", "r") as f:
            content = f.read()
    except FileNotFoundError:
        print("文件不存在")
    except UnicodeDecodeError:
        print("编码错误,请检查文件格式")
    


细节决定成败!
个人愚见,如有不对,恳请斧正!

posted @ 2025-03-29 09:33  一点浩然气~  阅读(33)  评论(0)    收藏  举报