news 2026/4/16 10:21:51

【Python】基础语法入门(十七)——文件操作与数据持久化:安全读写本地数据

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
【Python】基础语法入门(十七)——文件操作与数据持久化:安全读写本地数据


💾说明:几乎所有程序都需要与文件打交道——保存配置、记录日志、处理用户数据。本篇系统讲解 Python文件操作的核心方法,涵盖文本/二进制读写、路径处理、异常安全、编码问题及常用数据格式(CSV、JSON),助你写出可靠、跨平台、无乱码的文件处理代码。

你将掌握:

  • open()的正确用法与编码陷阱
  • 为什么必须用with语句?
  • 读写 CSV 和 JSON 文件
  • 处理大文件的高效策略
  • 路径拼接的最佳实践(pathlib

1. 基础文件读写:open()with

✅ 推荐写法:使用上下文管理器

# 写入文件withopen("hello.txt","w",encoding="utf-8")asf:f.write("你好,世界!")# 读取文件withopen("hello.txt","r",encoding="utf-8")asf:content=f.read()print(content)# 你好,世界!

🔑关键点

  • 必须指定encoding="utf-8"(避免 Windows 默认gbk导致乱码)
  • 永远用with:自动关闭文件,即使出错也安全

2. 文件打开模式速查表

模式含义说明
'r'只读(默认)文件必须存在
'w'写入覆盖原文件,不存在则创建
'a'追加在文件末尾添加,不覆盖
'x'独占创建文件存在则失败(防覆盖)
'b'二进制模式'rb','wb'
'+'读写'r+'(可读可写,不创建)

示例:追加日志

withopen("app.log","a",encoding="utf-8")asf:f.write("[INFO] 程序启动\n")

3. 读取文件的不同方式

方法适用场景
f.read()一次性读取全部内容(小文件)
f.readline()逐行读取(节省内存)
f.readlines()读取所有行到列表(需随机访问行)
for line in f推荐!高效逐行迭代(大文件)

处理大文件(推荐方式)

# 安全处理 GB 级日志文件withopen("huge.log","r",encoding="utf-8")asf:forlineinf:# 一次只加载一行到内存if"ERROR"inline:print(line.strip())

优势:内存占用恒定,不随文件大小增长。


4. 路径处理:告别字符串拼接!

❌ 错误做法(不可移植)

# Windows 用 \,Linux/Mac 用 /,极易出错!filepath="data"+"\\"+"input.txt"

✅ 正确做法:使用pathlib(Python 3.4+)

frompathlibimportPath data_dir=Path("data")file_path=data_dir/"input.txt"# 自动适配操作系统# 检查并创建目录data_dir.mkdir(exist_ok=True)# 读取文件content=file_path.read_text(encoding="utf-8")

💡pathlib是现代 Python 文件路径操作的标准方式


5. 数据持久化:JSON 与 CSV

5.1 JSON:结构化数据交换

importjsonfrompathlibimportPath# 写入data={"users":["Alice","Bob"],"version":1.0}Path("config.json").write_text(json.dumps(data,ensure_ascii=False,indent=2),encoding="utf-8")# 读取loaded=json.loads(Path("config.json").read_text(encoding="utf-8"))print(loaded["users"])# ['Alice', 'Bob']

⚠️ 注意:json只支持基本类型(dict,list,str,int,float,bool,None


5.2 CSV:表格数据处理

importcsvfrompathlibimportPath# 写入 CSVwithopen("students.csv","w",newline="",encoding="utf-8")asf:writer=csv.writer(f)writer.writerow(["姓名","年龄","班级"])writer.writerow(["小明",18,"高三(1)班"])# 读取 CSV(推荐 DictReader)withopen("students.csv",encoding="utf-8")asf:reader=csv.DictReader(f)forrowinreader:print(f"{row['姓名']}-{row['班级']}")# 小明 - 高三(1)班

🔑关键参数

  • newline="":防止 Windows 多余空行
  • DictReader:按列名访问,比索引更清晰

6. 二进制文件操作:图片、音频等

# 复制图片withopen("photo.jpg","rb")assrc:withopen("photo_copy.jpg","wb")asdst:dst.write(src.read())# 或用 shutil(更高效)importshutil shutil.copy2("photo.jpg","backup/photo_copy.jpg")

✅ 二进制模式('rb','wb'不需要指定 encoding


7. 异常处理:让文件操作更健壮

frompathlibimportPathdefsafe_read_file(filepath):path=Path(filepath)try:ifnotpath.exists():raiseFileNotFoundError(f"文件不存在:{filepath}")returnpath.read_text(encoding="utf-8")exceptPermissionError:print("❌ 权限不足,无法读取文件")exceptUnicodeDecodeError:print("❌ 文件编码不是 UTF-8,请检查")exceptExceptionase:print(f"❌ 未知错误:{e}")returnNonecontent=safe_read_file("secret.txt")

🛡️常见异常

  • FileNotFoundError
  • PermissionError
  • IsADirectoryError
  • UnicodeDecodeError(编码错误)

8. 实用技巧与最佳实践

场景推荐方案
临时文件tempfile.NamedTemporaryFile()
文件备份shutil.copy2(src, dst)(保留元数据)
递归遍历目录Path.rglob("*.txt")
获取文件大小Path("file.txt").stat().st_size
安全写入(防中断损坏)先写临时文件,再重命名

安全写入示例(原子操作)

frompathlibimportPathimportosdefatomic_write(filepath,content):"""安全写入:避免程序崩溃导致文件损坏"""temp_path=Path(filepath).with_suffix(".tmp")try:temp_path.write_text(content,encoding="utf-8")os.replace(temp_path,filepath)# 原子替换exceptException:temp_path.unlink(missing_ok=True)# 清理临时文件raise

9. 总结:文件操作黄金法则

  1. 永远用with open(...)
  2. 显式指定encoding="utf-8"(文本文件)
  3. pathlib.Path处理路径
  4. 大文件用for line in file逐行读取
  5. 结构化数据优先选 JSON/CSV
  6. 捕获并处理常见文件异常

💾记住
“文件是程序与外部世界的桥梁,
安全、可靠、跨平台是你的责任。”


下一步练习

  1. 改造你的 To-Do List 项目
    • 用 JSON 保存任务列表
    • 实现“自动备份”功能(每天生成todo_backup_20251212.json
  2. 编写一个日志分析脚本
    • 读取app.log
    • 统计 ERROR 行数并输出到error_report.txt
  3. 尝试用 CSV 存储联系人,支持增删查改

🐍掌控文件,就是掌控数据。
你已具备构建完整本地应用的能力!

继续编码,让数据为你所用!

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/4/16 10:16:41

阿尔比恩OL数据分析工具终极指南:从新手到高手的完整攻略

还在为阿尔比恩OL中复杂的数据分析而头疼吗?🤔 这款专业的阿尔比恩OL数据分析工具将成为你在游戏中的得力助手!无论你是刚入坑的新手还是征战多年的老玩家,这款工具都能帮你把游戏数据玩转得明明白白。 【免费下载链接】AlbionOnl…

作者头像 李华
网站建设 2026/4/16 10:14:42

揭秘Windows函数拦截神器:MinHook轻量级钩子库完全指南

揭秘Windows函数拦截神器:MinHook轻量级钩子库完全指南 【免费下载链接】minhook The Minimalistic x86/x64 API Hooking Library for Windows 项目地址: https://gitcode.com/gh_mirrors/mi/minhook 想要在Windows系统中实现函数调用拦截和监控?…

作者头像 李华
网站建设 2026/4/16 10:17:09

Notepads性能体验革命:为什么这款轻量级编辑器让你爱上高效写作

Notepads性能体验革命:为什么这款轻量级编辑器让你爱上高效写作 【免费下载链接】Notepads A modern, lightweight text editor with a minimalist design. 项目地址: https://gitcode.com/gh_mirrors/no/Notepads 你是否曾经因为文本编辑器启动缓慢、占用过…

作者头像 李华
网站建设 2026/4/16 3:40:20

24、Linux文本处理与OpenOffice.org办公套件使用指南

Linux文本处理与OpenOffice.org办公套件使用指南 一、Linux文本文件查看 在Linux系统中,几乎所有的配置文件都是文本文件,此外,许多伪程序(如shell脚本)、所有HTML文档以及系统中的许多其他项目也都是文本文件。如果你只想查看文本文件的内容而不做任何修改,无需使用编…

作者头像 李华
网站建设 2026/4/15 19:24:52

Mistral-Small-3.2升级:多模态大模型如何重塑企业级AI效率

Mistral-Small-3.2升级:多模态大模型如何重塑企业级AI效率 【免费下载链接】Mistral-Small-3.2-24B-Instruct-2506 项目地址: https://ai.gitcode.com/hf_mirrors/mistralai/Mistral-Small-3.2-24B-Instruct-2506 导语 Mistral AI近日发布Mistral-Small-3.…

作者头像 李华