文件读写完全指南:文本、二进制、编码你会了吗?

文件读写完全指南:文本、二进制、编码你会了吗?

作者:FeiLink

文件操作是 Python 编程中的核心技能之一,无论是日志系统、数据导入、模型训练还是用户配置管理,都离不开文件的读写操作。本章将全面讲解文本与二进制文件的读写方式、编码处理技巧,以及常见错误与调试方法,助你打通 Python 文件操作的任督二脉!


📘 一、文件打开模式详解

Python 使用内置函数 open() 进行文件操作:

open(file, mode='r', encoding=None)

常用 mode 模式如下:

模式含义
'r'只读模式(默认)
'w'写入模式,文件不存在会创建,存在则清空
'a'追加写入模式
'rb'以二进制方式读取文件
'wb'以二进制方式写入文件
'r+'可读可写,不清空内容

📝 二、读写文本文件

写入文本:

with open("example.txt", "w", encoding="utf-8") as f:
    f.write("Hello, Python!\n")
    f.write("欢迎来到文件世界。")

读取文本:

with open("example.txt", "r", encoding="utf-8") as f:
    content = f.read()
    print(content)

按行读取:

with open("example.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line.strip())

💾 三、操作二进制文件

例如图片、音频、模型文件等,都需要以二进制方式读取:

# 读取二进制文件
with open("image.jpg", "rb") as f:
    data = f.read()

# 写入二进制数据
with open("copy.jpg", "wb") as f:
    f.write(data)

🔁 四、文件的读写组合模式

同时读写一个文件:

with open("data.txt", "r+", encoding="utf-8") as f:
    content = f.read()
    f.write("\n---追加内容---")

注意:r+ 模式不会清空原文件内容,但写入位置取决于当前指针位置。


🧩 五、编码问题详解与解决方案

常见问题:

UnicodeDecodeError: 'gbk' codec can't decode byte ...

正确处理方式:

始终明确指定 encoding

# 推荐
with open("file.txt", "r", encoding="utf-8") as f:
    ...

如果不确定文件编码,可以使用 chardet 自动识别:

pip install chardet
import chardet

with open("unknown.txt", "rb") as f:
    result = chardet.detect(f.read(100))
    print(result)

🛠 六、常见错误与调试技巧

错误类型可能原因解决方法
FileNotFoundError文件路径错误或文件不存在检查路径拼写或是否存在
PermissionError没有权限尝试以管理员运行
UnicodeDecodeError编码不一致显式指定 encoding
ValueError: I/O operation on closed file操作已关闭的文件对象使用 with 语句管理资源

📦 七、实战项目:日志分析器(文本读写 + 编码处理)

项目背景: 公司服务器每天产生数万条日志,现在要读取这些日志文件,提取出包含 ERROR 的行,并输出到新文件中,供开发排查问题。

def extract_errors(log_file, output_file):
    with open(log_file, "r", encoding="utf-8") as f_in, \
         open(output_file, "w", encoding="utf-8") as f_out:
        for line in f_in:
            if "ERROR" in line:
                f_out.write(line)

extract_errors("server.log", "error_summary.log")

扩展任务(高级功能):

  • 加入时间过滤(只取今天的错误)
  • 使用正则提取错误代码
  • 输出统计信息:共多少个错误

❌ 错误示例分析:忘记关闭文件

错误示范:

f = open("data.txt", "r")
print(f.read())
# 忘记 f.close()

可能造成:

  • 文件资源未释放
  • 写入内容丢失
  • 文件锁问题

✅ 改进方式:

with open("data.txt", "r") as f:
    print(f.read())

🧠 面试常考点汇总

  1. open() 的默认编码和默认模式是什么?
  2. r+w+ 的区别?
  3. 为什么推荐使用 with open()
  4. 如何处理大文件(比如 10GB 日志)?
  5. 文本文件转二进制时需要注意什么?

🚀 拓展建议

  • 使用 pathlib 进行跨平台文件路径处理
  • 使用 csvjsonpickle 等模块进行格式化读写
  • 学习使用 gzipzipfile 对文件进行压缩与解压

📌 总结

  • 掌握 open() 各种模式的用法是基础
  • 编码问题是文件操作中最常见的“坑”,需特别注意
  • 使用 with open() 是 Pythonic 的推荐方式
  • 实战案例可以极大提升对文件处理的理解和掌握

本文部分内容由 AI 辅助生成,并经人工整理与验证,仅供参考学习,欢迎指出错误与不足之处。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值