【学习笔记】《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/21 2:56:12阅读更多 →
低幻觉数学大模型 助力发动机运维与能效优化

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

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

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

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

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

2026/6/21 2:59:09阅读更多 →
面试中被要求描述一次失败的项目?留学生如何利用“技术反思模型”向主管送分「蒸汽求职分享」

面试中被要求描述一次失败的项目?留学生如何利用“技术反思模型”向主管送分「蒸汽求职分享」

在全球顶尖大厂或跨国企业的校招长跑中,综合主管面试和行为能力测评是决定海归留学生能否拿到全职录用总包的核心关口。许多手握海外名校学历、技术栈极其扎实的新人,往往在第一步由于不懂得如何回应挫折类问题而掉入坑里。 蒸汽教育在观察各大企业的主管…

2026/6/22 2:50:21阅读更多 →
高海拔水轮机测控难?LabVIEW+PLC方案实现±0.093%精度突破

高海拔水轮机测控难?LabVIEW+PLC方案实现±0.093%精度突破

阅读时间:5分钟 | 适用人群:水电站工程师/测控系统设计师/项目负责人痛点直击:国内缺乏高海拔冲击式水轮机专用测控系统,平原地区试验数据无法模拟真实工况,海拔、气压等环境参数对水力特性的影响机制难以揭示。传统方…

2026/6/22 2:50:21阅读更多 →
3D高斯泼溅隐写术:在神经渲染中实现高保真信息隐藏

3D高斯泼溅隐写术:在神经渲染中实现高保真信息隐藏

1. 项目缘起:当3D内容创作遇上信息隐藏的刚需最近在折腾一些3D内容生成和分发的项目,遇到了一个挺有意思的痛点:如何在不影响视觉质量的前提下,给这些三维模型“嵌入”一些额外的信息?比如版权标识、创作元数据&#x…

2026/6/22 2:50:21阅读更多 →
JFinTEB:首个日语金融文本嵌入基准,解决领域专用模型评估难题

JFinTEB:首个日语金融文本嵌入基准,解决领域专用模型评估难题

1. 项目背景:为什么需要一个日语金融文本嵌入基准?如果你在日语金融科技领域工作过,或者尝试过将大语言模型(LLM)或检索增强生成(RAG)系统应用到日文财报、新闻或公告分析中,大概率会…

2026/6/22 2:50:21阅读更多 →
从拉姆齐数到有序与循环变体:复杂系统中的必然模式

从拉姆齐数到有序与循环变体:复杂系统中的必然模式

1. 引言:从“派对问题”到拉姆齐理论的广阔世界想象一下,你正在组织一场有六位客人的小型聚会。你希望确保,无论这些客人之间彼此是朋友还是陌生人,总能从中找出三个人,他们要么彼此都认识,要么彼此都不认识…

2026/6/22 2:50:21阅读更多 →
EVIL框架:基于LLM引导进化搜索的可解释动态系统零样本推理

EVIL框架:基于LLM引导进化搜索的可解释动态系统零样本推理

1. 从“黑盒”到“白盒”:为什么我们需要可解释的动态系统推理 在工程、金融、生物等众多领域,我们每天都在和动态系统打交道。比如,预测一个摆锤的摆动轨迹,分析股票价格的波动,或者模拟一个细胞内的化学反应网络。传…

2026/6/22 2:45:21阅读更多 →
【人工智能】一文搞定到底什么是智能体

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

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

2026/6/21 0:00:40阅读更多 →
嵌入式GUI控件实战:ROTARY、SCROLLBAR、SLIDER原理与应用

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

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

2026/6/22 1:15:34阅读更多 →
Google AI Studio 300美元额度的真相与实战指南

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

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

2026/6/21 0:00:40阅读更多 →
Codex本地AI编码代理与CC Switch协议适配实战

Codex本地AI编码代理与CC Switch协议适配实战

1. Codex不是“另一个VS Code插件”,而是本地AI编码代理的临界点Codex这个名字,现在被太多人误读了。它不是ChatGPT那个早已停更的旧模型代号,也不是某个新出的VS Code扩展图标——它是2024年中后期悄然浮出水面的一类本地化AI编码代理&#…

2026/6/22 0:04:18阅读更多 →
从MSP430到Flexis QE128:8/32位MCU无缝迁移与低功耗设计实战

从MSP430到Flexis QE128:8/32位MCU无缝迁移与低功耗设计实战

1. 项目概述:当8位MCU遇到性能瓶颈,我们如何优雅升级?在嵌入式开发领域,尤其是电池供电的便携式设备、工业传感器节点或智能家居终端中,我们常常面临一个经典的两难选择:是选择功耗极低但性能有限的8位微控…

2026/6/22 0:04:18阅读更多 →
大语言模型空间推理能力提升:TEXT2SPACE数据集与ASCII增强技术解析

大语言模型空间推理能力提升:TEXT2SPACE数据集与ASCII增强技术解析

1. 项目缘起:当大语言模型“看”不懂空间 最近在折腾大语言模型(LLM)的各种应用时,我发现一个挺有意思的现象:你让模型写首诗、写代码、甚至做逻辑推理,它可能都表现得有模有样。但一旦涉及到需要理解“空间…

2026/6/22 0:04:18阅读更多 →