当前位置: 首页 > news >正文

【学习笔记】《Python编程 从入门到实践》第10章:文件读写、异常处理与json存储

Python 入门实践 10:文件读写、异常处理与 JSON 存储

开篇:这篇解决什么问题

这一篇主要解决一个问题:程序运行完以后,数据怎么保存;程序出错时,怎么不要直接崩掉。

很多脚本不是只打印几行结果就结束,它可能要读取配置、写入日志、保存用户选择、处理文件不存在的情况。这时就会用到文件读写、异常处理和 JSON。

本篇你会学到什么

  • 如何使用with open()读取文件
  • 如何写入文件和追加内容
  • 如何用try-except处理常见错误
  • 如何用 JSON 保存和读取简单数据
  • 为什么要把代码重构成函数

场景案例:保存一个脚本配置

假设我们要保存一个任务配置:

importjson config={'task_name':'daily_report','owner':'alice','retry_count':3,}withopen('config.json','w',encoding='utf-8')asfile_object:json.dump(config,file_object,ensure_ascii=False,indent=2)

读取配置:

importjsonwithopen('config.json','r',encoding='utf-8')asfile_object:config=json.load(file_object)print(config['task_name'])

这就是很多脚本保存配置的基本方式。

知识点拆解

1. 读取整个文件

假设有一个文件notes.txt

Python is useful. File reading is common.

读取它:

withopen('notes.txt','r',encoding='utf-8')asfile_object:contents=file_object.read()print(contents)

with会在代码块结束后自动关闭文件,比手动关闭更稳。

2. 逐行读取

withopen('notes.txt','r',encoding='utf-8')asfile_object:forlineinfile_object:print(line.rstrip())

rstrip()用来去掉每行末尾的换行符。

3. 把文件内容读成列表

withopen('notes.txt','r',encoding='utf-8')asfile_object:lines=file_object.readlines()forlineinlines:print(line.rstrip())

这种写法适合后面还要多次处理这些行。

4. 写入文件

withopen('result.txt','w',encoding='utf-8')asfile_object:file_object.write('Task finished.\n')

注意:w模式会覆盖原文件内容。如果文件不存在,会创建新文件。

5. 追加内容

withopen('result.txt','a',encoding='utf-8')asfile_object:file_object.write('Another task finished.\n')

a表示追加,不会清空原文件。

6. 异常是什么

异常就是程序运行时出现的问题,比如除以 0、文件不存在、输入无法转成数字。

print(5/0)

这会触发ZeroDivisionError

7. 使用try-except

try:print(5/0)exceptZeroDivisionError:print("You can't divide by zero.")

程序不会直接崩掉,而是执行except里的处理逻辑。

8. 处理文件不存在

filename='missing.txt'try:withopen(filename,'r',encoding='utf-8')asfile_object:contents=file_object.read()exceptFileNotFoundError:print('File not found: '+filename)else:print(contents)

else里的代码只会在没有异常时执行。

9. 处理用户输入错误

user_input=input('Enter a number: ')try:number=int(user_input)exceptValueError:print('Please enter a valid number.')else:print(number*2)

只要涉及用户输入,就要考虑输入不符合预期的情况。

10. 使用 JSON 保存数据

写入 JSON:

importjson numbers=[2,3,5,7,11]withopen('numbers.json','w',encoding='utf-8')asfile_object:json.dump(numbers,file_object)

读取 JSON:

importjsonwithopen('numbers.json','r',encoding='utf-8')asfile_object:numbers=json.load(file_object)print(numbers)

JSON 适合保存列表、字典、字符串、数字这类简单数据。

11. 重构:把逻辑拆成函数

importjsondefload_config(filename):try:withopen(filename,'r',encoding='utf-8')asfile_object:returnjson.load(file_object)exceptFileNotFoundError:return{}defsave_config(filename,config):withopen(filename,'w',encoding='utf-8')asfile_object:json.dump(config,file_object,ensure_ascii=False,indent=2)

这样后面需要读取或保存配置时,就不用重复写文件操作代码。

初学者容易踩的坑

问题常见原因建议
文件找不到路径不对或文件不存在检查当前目录和文件名
写入后原内容没了使用了w模式想追加用a模式
中文乱码没指定编码使用encoding='utf-8'
JSON 读取失败文件内容不是合法 JSON确认文件格式正确
捕获异常太宽泛直接写except:尽量捕获明确异常类型

工作里能怎么用

场景用法
读取配置json.load()
保存执行结果写入文本或 JSON
记录日志追加写入文件
输入校验捕获ValueError
文件缺失兜底捕获FileNotFoundError

示例:读取配置并给默认值:

config=load_config('config.json')retry_count=config.get('retry_count',3)print(retry_count)

小结

  • with open()可以安全打开文件
  • read()读取全部内容,readlines()读取为列表
  • w模式会覆盖文件,a模式会追加内容
  • try-except可以处理运行时错误
  • else适合放没有异常时才执行的代码
  • JSON 适合保存简单结构化数据
  • 文件读写逻辑重复时,可以重构成函数

下一篇

下一篇继续讲测试。文件、异常和 JSON 能让脚本更实用,测试能帮我们确认代码改动后仍然可靠。

http://www.jsqmd.com/news/1033406/

相关文章:

  • 2026年IEEE TGCN,多策略非线性多目标粒子群算法+稀疏平面天线阵列合成
  • 2026年近期大华优秀的装修源头公司业内推荐:如何甄选可靠伙伴? - 品牌鉴赏官2026
  • LegacyUpdate项目:一键修复Windows Update错误80072EFE的完整指南
  • 半导体设备EAP系统开发实战——SECS/GEM协议从入门到Python完整实现
  • 2026青岛李沧区比较好的挂机空调维修服务商口碑推荐 - 品牌排行榜
  • 如何快速掌握QQScreenShot:腾讯截图工具的终极独立版使用指南
  • 终极指南:如何免费使用Adobe开源字体Source Serif提升网页排版
  • 随机森林实战全解析:从过拟合防控到业务归因
  • 苏州全自动打包机选哪家?沃锐智能3大优势解难题,苏州市全自动打包机 - 品牌推荐师
  • 从零到一:OpCore Simplify如何用智能自动化重塑黑苹果配置体验
  • 如何用GalTransl轻松制作Galgame汉化补丁:AI翻译工具完全指南
  • 2026年除甲醛领域有哪些技术实力较强的公司-专利资质与案例对比 - 观域传媒
  • 使用VB.NET和C开发软件要不要购买证书
  • 因瓦合金厂商推荐大盘点,这几家实力派值得长期合作 - 品牌2026
  • 2026年06月17日科技热点新闻
  • 2026年更新:忻州断桥铝合金窗选购终极指南与标杆服务企业深度剖析 - 品牌鉴赏官2026
  • 2026年最新高中英语记单词软件实测运行效果有哪些差异?
  • Windows 11右键菜单自定义终极指南:打造你的专属效率工具箱
  • Bingsu/adetailer YOLOv8检测模型:针对人脸、人体与服装的多场景视觉解决方案
  • 百度网盘高速下载终极指南:告别限速的Python解析工具
  • 抖音批量下载神器:3分钟搞定无水印视频批量采集
  • 2026年武汉AI搜索服务商深度剖析:为何湖北观微知科技成为企业? - 品牌鉴赏官2026
  • 2026年企业文档自动化系统选型:哪些AI开发公司能真正落地? - 广州矩阵架构科技公司
  • 2026年新发布德宏德力西旗舰店电器,专业服务商亮恺电气深度解析 - 品牌鉴赏官2026
  • 2026年哪些GEO服务商提供AI搜索曝光跟踪和阶段性复盘?选型指南与服务商对比 - 观域传媒
  • 终极Xshell配色方案指南:250+专业主题让您的终端焕然一新!
  • 2026年河北省比较好的自习室品牌推荐:专业服务与空间价值解析 - 品牌鉴赏官2026
  • GalTransl:基于大语言模型的Galgame自动化翻译技术架构解析
  • 2026年热门的COB小间距产品供应商实力与用户口碑深度解析
  • 2026年6月西安现浇隔层搭建施工队专业服务解析 - 品牌鉴赏官2026