Python编程基础六(文件操作)

深入理解Python文件操作:从编码到实战案例

一、文件编码

本质作用:文件编码如同翻译字典,将人类可读内容(如”你好”)与二进制数据进行互译
工作流程

  • 存储:文本 → 编码表 → 二进制
  • 读取:二进制 → 编码表 → 文本

常见标准

编码类型适用场景特点
UTF-8全球通用支持多语言
GBK简体中文中文存储高效
Big5繁体中文台湾地区主流

准则:必须使用相同编码进行读写操作,否则会出现乱码!

二、文件读取全流程解析

1. 文件本质认知

  • 存储定义:操作系统管理数据的逻辑单位,保存关机后仍需保留的信息
  • 常见类型:文本文件:TXT/HTML(人类可读) – 多媒体文件:MP4/JPEG(二进制存储) – 可执行文件:EXE/DLL(机器指令)

2. 操作三步曲

# 标准流程示例

f = open('data.txt', 'r', encoding='UTF-8')

# 打开

content = f.read()

# 读取

f.close() # 关闭

3. 访问模式对比表

模式指针位置文件存在文件不存在
r开头读取报错
w开头清空写入新建
a末尾追加写入新建

4. 读取方法对比

# read():读取指定字节数.

语法:

文件对象.read(num)

num表示从文件中读取的长度,单位为字节,默认全部内容

print(f.read(10)) # 读取前10字节

# readline():逐行读取,一次读取一行数据,每调用一次读取新一行数据

while True:

line = f.readline()

if not line:

break

# 迭代器读取(推荐)

for line in f:

print(line.strip())

三、文件写入操作详解

核心方法

f.write(content) # 写入内存缓冲区

f.flush() # 强制刷盘操作

f.close() # 自动触发flush并释放资源

缓冲区机制

阶段操作存储位置特点
写入write()内存缓冲区避免高频硬盘操作
刷盘flush()物理硬盘确保持久化存储

关键注意事项

  • 未调用flush/close时数据可能丢失
  • 密集写入时应集中操作(示例):

buffer = []

for i in range(1000):

buffer.append(f"第{i}条数据\n")

f.writelines(buffer) # 批量写入 f.flush()

四、追加写入模式实战

模式对比

# w模式(覆盖写入)

with open("log.txt", "w") as f:

f.write("2023-新日志\n") # 文件原有内容被清空

# a模式(尾部追加)

with open("log.txt", "a") as f:

f.write("\n2024-新增日志") # 保留历史记录

换行技巧

# 自动换行写入

lines = ["第一行内容", "第二行内容"]

with open("data.txt", "a") as f:

for line in lines:

f.write(line + "\n") # 显式添加换行符

五、综合案例:账单数据清洗

案例背景
原始账单文件(bill.txt)结构示例:

张三,2023-01-05,300,消费,测试

李四,2023-02-12,5000,收入,正式

王五,2023-03-21,200,消费,测试

实现代码

fr = open("D:/bill.txt", "r", encoding="UTF-8")

fw = open("D:/bill.txt.bak", "w", encoding="UTF-8")

for line in for:

line = line.strip()

if line.split(",")[4]=="测试":

continue

fw.write(line)

fw.write("\n")

fr.close()

fw.close()

代码解析

使用open()和r模式打开源文件

使用open()和w模式创建备份文件

通过for循环逐行读取源文件

每行使用strip()去除首尾空格和换行符

使用split(“,”)分割字符串获取各字段

判断第4个字段(下标3)是否为”测试”

是测试则continue跳过,否则写入备份文件

写入时需手动添加换行符”\n”

最后关闭两个文件对象

六、文件操作最佳实践

  1. 编码统一原则:始终明确指定encoding参数(推荐UTF-8)
  2. 资源管理:优先使用with语句替代手动close# 安全写法示例

with open("data.txt", "r", encoding="UTF-8") as f:

content = f.read() # 自动执行f.close()

  1. 大文件处理
    • 使用逐行读取代替read()
    • 避免一次性加载超大数据导致内存溢出
  2. 路径处理技巧import os # 构建跨平台路径 file_path = os.path.join("data", "2024", "report.txt")

结语

掌握文件操作是Python数据处理的基础能力。通过理解编码原理、熟练运用读写模式、合理使用缓冲区机制,开发者可以高效实现:

  • 日志记录系统
  • 数据清洗管道
  • 配置文件管理
  • 批量数据处理