数据持久化
内存里的数据程序结束就会消失,文件可以把数据长期保存下来。
文件处理是 Python 工程里非常常见的基础能力。知识库资料、日志、报表、配置文件、临时结果,很多都需要通过文件来保存、读取和加工。
数据持久化
内存里的数据程序结束就会消失,文件可以把数据长期保存下来。
跨场景交互
知识库、日志、报表、配置、导入导出,都离不开文件读写。
规避风险
文件操作不当可能误删数据、覆盖原文,甚至造成资源泄露。
提升效率
把常用文件操作封装成函数,可以减少重复代码。
手动处理文件时,流程通常是:打开 → 编辑 → 保存 → 关闭。
Python 程序处理文件,本质上也是三步:
申请资源:打开文件,获得文件引用,建立程序和磁盘文件之间的连接。
数据交互:读取、写入、追加、遍历或修改文件内容。
释放资源:关闭文件引用,避免资源一直被占用。
open() 是 Python 原生文件操作函数,基本格式如下:
open("文件路径", mode="r", encoding="utf-8")常见模式:
| 模式 | 含义 | 文件不存在时 | 文件存在时 |
|---|---|---|---|
r |
只读,默认模式 | 报 FileNotFoundError |
读取原内容 |
w |
覆盖写 | 创建新文件 | 清空原内容后写入 |
a |
追加写 | 创建新文件 | 在文件末尾追加 |
编码建议:
| 编码 | 适用场景 |
|---|---|
utf-8 |
推荐默认使用,跨平台更稳 |
gbk |
旧 Windows 文本文件可能会遇到 |
不推荐手动 close(),因为中间一旦报错,后面的关闭逻辑可能不会执行。
f = open("data.txt", "r")content = f.read()f.close()推荐使用 with,代码块结束后会自动关闭文件:
with open("data.txt", "r", encoding="utf-8") as f: content = f.read()常见读写:
with open("data.txt", "r", encoding="utf-8") as f: content = f.read()
print(content)with open("data.txt", "w", encoding="utf-8") as f: f.write("新的内容\n")w 会覆盖原文件内容,使用前要确认这就是想要的结果。
with open("log.txt", "a", encoding="utf-8") as f: f.write("Hello Python\n")日志、历史记录这类场景,更常用追加写。
pathlib 是 Python 官方推荐的路径处理模块。它把路径封装成 Path 对象,比字符串拼接路径更安全、更清晰。
| 对比项 | 原生 open |
pathlib |
|---|---|---|
| 路径处理 | 容易写成字符串拼接 | 使用 Path 对象安全拼接 |
| 资源关闭 | 手动关闭或配合 with |
小文件读写更简洁 |
| 代码清晰度 | 读写逻辑稍分散 | 常见操作一行完成 |
from pathlib import Path
file_path = Path(__file__).parent / "data.txt"小文件可以直接一次性读取:
from pathlib import Path
file_path = Path(__file__).parent / "data.txt"content = file_path.read_text(encoding="utf-8")
print(content)大文件不建议一次性读进内存,可以逐行读取:
from pathlib import Path
file_path = Path(__file__).parent / "data.txt"
with file_path.open("r", encoding="utf-8") as f: for line in f: print(line.strip())写入文件分两类:覆盖写和追加写。
from pathlib import Path
file_path = Path(__file__).parent / "data.txt"file_path.write_text("覆盖内容\n", encoding="utf-8")覆盖写会清空原内容,适合生成全新文件或重写结果文件。
from pathlib import Path
file_path = Path(__file__).parent / "log.txt"
with file_path.open("a", encoding="utf-8") as f: f.write("写入的内容\n")追加写适合日志、记录流水、保留历史数据。
文件内容通常不能“原地修改某一段”,更常见的流程是:读取内容 → 内存中修改 → 覆盖写回。
from pathlib import Path
def modify_file(file_path: str, old: str, new: str) -> None: file = Path(file_path)
content = file.read_text(encoding="utf-8")
if old in content: new_content = content.replace(old, new) file.write_text(new_content, encoding="utf-8")pathlib 中可以用 unlink() 删除文件。删除操作不可逆,必须谨慎。
from pathlib import Path
def delete_file(file_path: str) -> None: file = Path(file_path)
if file.exists(): file.unlink() print(f"已删除:{file.name}") else: print("文件不存在")文件操作经常会重复出现,适合封装成工具函数。
| 函数 | 作用 |
|---|---|
read_text_file(path) |
读取文本文件 |
write_text_file(path, content) |
覆盖写文本 |
append_text_file(path, content) |
追加写文本 |
replace_text_in_file(path, old, new) |
替换文件内容 |
delete_file(path) |
安全删除文件 |
示例:
from pathlib import Path
def read_text_file(path: str) -> str: return Path(path).read_text(encoding="utf-8")
def append_text_file(path: str, content: str) -> None: with Path(path).open("a", encoding="utf-8") as f: f.write(content + "\n")