【学习笔记】《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,encodingutf-8)asfile_object:json.dump(config,file_object,ensure_asciiFalse,indent2)读取配置importjsonwithopen(config.json,r,encodingutf-8)asfile_object:configjson.load(file_object)print(config[task_name])这就是很多脚本保存配置的基本方式。知识点拆解1. 读取整个文件假设有一个文件notes.txtPython is useful. File reading is common.读取它withopen(notes.txt,r,encodingutf-8)asfile_object:contentsfile_object.read()print(contents)with会在代码块结束后自动关闭文件比手动关闭更稳。2. 逐行读取withopen(notes.txt,r,encodingutf-8)asfile_object:forlineinfile_object:print(line.rstrip())rstrip()用来去掉每行末尾的换行符。3. 把文件内容读成列表withopen(notes.txt,r,encodingutf-8)asfile_object:linesfile_object.readlines()forlineinlines:print(line.rstrip())这种写法适合后面还要多次处理这些行。4. 写入文件withopen(result.txt,w,encodingutf-8)asfile_object:file_object.write(Task finished.\n)注意w模式会覆盖原文件内容。如果文件不存在会创建新文件。5. 追加内容withopen(result.txt,a,encodingutf-8)asfile_object:file_object.write(Another task finished.\n)a表示追加不会清空原文件。6. 异常是什么异常就是程序运行时出现的问题比如除以 0、文件不存在、输入无法转成数字。print(5/0)这会触发ZeroDivisionError。7. 使用try-excepttry:print(5/0)exceptZeroDivisionError:print(You cant divide by zero.)程序不会直接崩掉而是执行except里的处理逻辑。8. 处理文件不存在filenamemissing.txttry:withopen(filename,r,encodingutf-8)asfile_object:contentsfile_object.read()exceptFileNotFoundError:print(File not found: filename)else:print(contents)else里的代码只会在没有异常时执行。9. 处理用户输入错误user_inputinput(Enter a number: )try:numberint(user_input)exceptValueError:print(Please enter a valid number.)else:print(number*2)只要涉及用户输入就要考虑输入不符合预期的情况。10. 使用 JSON 保存数据写入 JSONimportjson numbers[2,3,5,7,11]withopen(numbers.json,w,encodingutf-8)asfile_object:json.dump(numbers,file_object)读取 JSONimportjsonwithopen(numbers.json,r,encodingutf-8)asfile_object:numbersjson.load(file_object)print(numbers)JSON 适合保存列表、字典、字符串、数字这类简单数据。11. 重构把逻辑拆成函数importjsondefload_config(filename):try:withopen(filename,r,encodingutf-8)asfile_object:returnjson.load(file_object)exceptFileNotFoundError:return{}defsave_config(filename,config):withopen(filename,w,encodingutf-8)asfile_object:json.dump(config,file_object,ensure_asciiFalse,indent2)这样后面需要读取或保存配置时就不用重复写文件操作代码。初学者容易踩的坑问题常见原因建议文件找不到路径不对或文件不存在检查当前目录和文件名写入后原内容没了使用了w模式想追加用a模式中文乱码没指定编码使用encodingutf-8JSON 读取失败文件内容不是合法 JSON确认文件格式正确捕获异常太宽泛直接写except:尽量捕获明确异常类型工作里能怎么用场景用法读取配置json.load()保存执行结果写入文本或 JSON记录日志追加写入文件输入校验捕获ValueError文件缺失兜底捕获FileNotFoundError示例读取配置并给默认值configload_config(config.json)retry_countconfig.get(retry_count,3)print(retry_count)小结with open()可以安全打开文件read()读取全部内容readlines()读取为列表w模式会覆盖文件a模式会追加内容try-except可以处理运行时错误else适合放没有异常时才执行的代码JSON 适合保存简单结构化数据文件读写逻辑重复时可以重构成函数下一篇下一篇继续讲测试。文件、异常和 JSON 能让脚本更实用测试能帮我们确认代码改动后仍然可靠。

相关新闻

终极指南:如何在3DS上实现原生GBA硬件运行

终极指南:如何在3DS上实现原生GBA硬件运行

终极指南:如何在3DS上实现原生GBA硬件运行 【免费下载链接】open_agb_firm open_agb_firm is a bare metal app for running GBA homebrew/games using the 3DS builtin GBA hardware. 项目地址: https://gitcode.com/gh_mirrors/op/open_agb_firm 你是否厌倦…

2026/6/24 3:46:34阅读更多 →
低幻觉数学大模型 助力发动机运维与能效优化

低幻觉数学大模型 助力发动机运维与能效优化

在发动机长期服役、工况动态变化的全生命周期中,传统数据分析与状态预判手段容易出现结果失真,难以精准把控设备健康状态与能耗水平。Deepoc低幻觉数学大模型依托贴合物理规律的运算逻辑,将高可信算力融入发动机运维管理、动态标定、故障溯源…

2026/6/24 3:34:10阅读更多 →
命令行工具自省:从黑盒调试到系统透视的必备技能

命令行工具自省:从黑盒调试到系统透视的必备技能

1. 项目概述:什么是命令行工具自省?如果你在终端里敲过命令,那你肯定用过命令行工具。但“自省”这个词听起来有点玄乎,它到底是什么意思?简单来说,命令行工具的自省,就是让工具自己“照镜子”&…

2026/6/24 4:52:15阅读更多 →
KMS_VL_ALL_AIO:Windows和Office智能激活的进阶解决方案

KMS_VL_ALL_AIO:Windows和Office智能激活的进阶解决方案

KMS_VL_ALL_AIO:Windows和Office智能激活的进阶解决方案 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 在数字化办公环境中,Windows Office激活已成为每个用户必须面对的…

2026/6/24 10:09:01阅读更多 →
AltSnap:3分钟掌握Windows窗口高效管理终极技巧

AltSnap:3分钟掌握Windows窗口高效管理终极技巧

AltSnap:3分钟掌握Windows窗口高效管理终极技巧 【免费下载链接】AltSnap Maintained continuation of Stefan Sundins AltDrag 项目地址: https://gitcode.com/gh_mirrors/al/AltSnap 你是否厌倦了在Windows中费力拖动窗口标题栏?AltSnap 这款免…

2026/6/24 10:09:01阅读更多 →
别再找“避风港“了:极端行情下,最高级的交易智慧是“不出门“

别再找“避风港“了:极端行情下,最高级的交易智慧是“不出门“

引言:一个关于“等待回暖”的残酷循环你是不是也陷入了这种“生产性焦虑”:看着满屏的惨绿,一边心惊肉跳,一边却总想在账户里做点什么,好让亏损看起来不那么刺眼?回看过去的这几个月,市场就像一…

2026/6/24 10:09:01阅读更多 →
重新定义游戏模组管理:Irony Mod Manager的深度实战心得

重新定义游戏模组管理:Irony Mod Manager的深度实战心得

重新定义游戏模组管理:Irony Mod Manager的深度实战心得 【免费下载链接】IronyModManager Mod Manager for Paradox Games. Official Discord: https://discord.gg/t9JmY8KFrV 项目地址: https://gitcode.com/gh_mirrors/ir/IronyModManager 你是否曾经在凌…

2026/6/24 10:09:01阅读更多 →
成长型企业数字化转型实践:金蝶AI星空智能制造与集团协同解决方案解析

成长型企业数字化转型实践:金蝶AI星空智能制造与集团协同解决方案解析

#ERP #金蝶AI星空 #企业数字化转型 #智能制造 #集团协同管理 #成长型企业管理 #数字化解决方案当下,数字化转型已经成为成长型企业提质增效、规模化扩张的核心突破口。相较于大型企业完善的数字化管理体系,中小成长型企业普遍存在生产管理碎片化、数据互…

2026/6/24 10:09:01阅读更多 →
微信聊天记录永久保存:3步轻松备份你的数字记忆

微信聊天记录永久保存:3步轻松备份你的数字记忆

微信聊天记录永久保存:3步轻松备份你的数字记忆 【免费下载链接】WeChatMsg 提取微信聊天记录,将其导出成HTML、Word、CSV文档永久保存,对聊天记录进行分析生成年度聊天报告 项目地址: https://gitcode.com/GitHub_Trending/we/WeChatMsg …

2026/6/24 10:03:59阅读更多 →
【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体

【人工智能】一文搞定到底什么是智能体 一文搞定到底什么是智能体【人工智能】一文搞定到底什么是智能体一. LM,WorkFlow,Agent分别有什么么不同二. Agent的思考过程是怎样的三. Agent的五个核心部分1)LLM2)Prompt3)Me…

2026/6/24 7:33:03阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

1. 嵌入式GUI控件:从原理到实战的深度解析在嵌入式系统开发中,图形用户界面(GUI)的设计与实现往往是项目从“能用”到“好用”的关键一跃。不同于资源充沛的PC或移动平台,嵌入式设备的GUI需要在有限的CPU性能、内存空间…

2026/6/24 2:12:09阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

Google AI Studio 300美元额度的真相与实战指南

1. 这300美金不是“送钱”,而是Google埋下的第一道技术门槛 你看到标题里那个醒目的“$300美金”时,第一反应可能是:又一个免费额度?领完就完事?我亲手试过——这300美金根本不是红包,而是一张入场券&…

2026/6/24 7:37:00阅读更多 →
TaskJuggler脚本编程入门:用代码实现自动化项目管理

TaskJuggler脚本编程入门:用代码实现自动化项目管理

TaskJuggler脚本编程入门:用代码实现自动化项目管理 【免费下载链接】TaskJuggler TaskJuggler - Project Management beyond Gantt chart drawing 项目地址: https://gitcode.com/gh_mirrors/ta/TaskJuggler TaskJuggler是一款强大的开源项目管理工具&#…

2026/6/24 0:02:41阅读更多 →
终极教程:使用angular-mobile-nav实现流畅的移动页面过渡效果

终极教程:使用angular-mobile-nav实现流畅的移动页面过渡效果

终极教程:使用angular-mobile-nav实现流畅的移动页面过渡效果 【免费下载链接】angular-mobile-nav An angular navigation service for mobile applications 项目地址: https://gitcode.com/gh_mirrors/an/angular-mobile-nav angular-mobile-nav是一款专为…

2026/6/24 0:02:41阅读更多 →
Wan2.1-Fun-V1.1-1.3B-InP Web UI使用教程:无需代码的AI视频创作

Wan2.1-Fun-V1.1-1.3B-InP Web UI使用教程:无需代码的AI视频创作

Wan2.1-Fun-V1.1-1.3B-InP Web UI使用教程:无需代码的AI视频创作 【免费下载链接】Wan2.1-Fun-V1.1-1.3B-InP 项目地址: https://ai.gitcode.com/hf_mirrors/PAI/Wan2.1-Fun-V1.1-1.3B-InP Wan2.1-Fun-V1.1-1.3B-InP是一款强大的AI视频创作工具,…

2026/6/24 0:02:41阅读更多 →