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

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

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

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

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

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

2026/6/18 2:30:35阅读更多 →
自动对焦学习-4

自动对焦学习-4

自动对焦系统中的 Zoom、Focus 和标定表到底是什么?一文讲清它们之间的关系 一、前言 在做工业相机、机器视觉、电动变焦镜头或者自动对焦设备时,经常会遇到几个关键词: ZoomFocus自动对焦Zoom-Focus 曲线标定表Zoom Tracking 这些词看起来都…

2026/6/18 3:45:48阅读更多 →
离职信息同步:避免遗漏账号权限回收 AI Agent构建滑动时间窗口的自动化治理方案

离职信息同步:避免遗漏账号权限回收 AI Agent构建滑动时间窗口的自动化治理方案

本文围绕企业离职管理中账号权限回收不及时、同步信息遗漏等核心痛点,分析传统全量同步与手动脚本方案在数字化治理中的局限性。通过引入基于AI Agent的增量回溯同步机制,结合系统时间锚点与自动化闭环,实现离职信息秒级同步与权限精准回收&a…

2026/6/18 3:45:48阅读更多 →
okbiye 开题 AI 革新科研起步难题,一站式开题报告生成工具拆解全流程

okbiye 开题 AI 革新科研起步难题,一站式开题报告生成工具拆解全流程

okbiye-免费查重复率aigc检测/开题报告/毕业论文/智能排版/文献综述/AI PPT开题报告 - Okbiye智能写作https://www.okbiye.com/ai/ktbg 引言:本科硕博生开题阶段的普遍困境 每年毕业季、课题申报季,无数学生都会陷入同一种科研焦虑:开题报告…

2026/6/18 3:45:48阅读更多 →
松弛人生,与世界温柔相处

松弛人生,与世界温柔相处

人生最舒服的状态,莫过于学会与自己、与世界温柔相处。放下那些不必要的执念,让生活回归原本的模样。 不计较,是放过自己。与其在琐碎的小事里消耗精力,不如把目光放长远,专注于真正值得的事情。不强求,是尊…

2026/6/18 3:45:48阅读更多 →
机器学习数据泄漏排查实战:5类代码级陷阱与防泄漏工程规范

机器学习数据泄漏排查实战:5类代码级陷阱与防泄漏工程规范

1. 项目概述:这不是又一篇“数据泄露”理论课,而是一场实打实的代码排雷战你肯定在面试里被问过“什么是数据泄漏”,也大概率能背出“目标变量泄漏”和“训练测试污染”这两个标准答案。但真到了写代码、调模型、交结果的那一刻——当你的AUC…

2026/6/18 3:45:48阅读更多 →
Redpill Recovery终极指南:从NAS急救到黑群晖安装,一站式解决方案

Redpill Recovery终极指南:从NAS急救到黑群晖安装,一站式解决方案

Redpill Recovery终极指南:从NAS急救到黑群晖安装,一站式解决方案 【免费下载链接】rr Redpill Recovery (arpl-i18n) 项目地址: https://gitcode.com/gh_mirrors/rr2/rr 当你的群晖NAS突然宕机,数据访问中断,那种焦虑感简…

2026/6/18 3:40:48阅读更多 →
ZigBee HA智能家居开发实战:从集群模型到NXP JN516x代码实现

ZigBee HA智能家居开发实战:从集群模型到NXP JN516x代码实现

1. ZigBee HA:智能家居的“通用语言”与开发基石如果你正在或计划踏入智能家居设备开发领域,尤其是基于ZigBee协议,那么“ZigBee Home Automation”这个名词你一定不陌生。它不仅仅是ZigBee联盟定义的一套应用层规范,更是确保不同…

2026/6/18 0:00:24阅读更多 →
Java毕设选题推荐:基于 Spring Boot 的个人随笔博客运维管理系统的设计与实现 基于 Spring Boot 的用户原创博客分享社区【附源码、mysql、文档、调试+代码讲解+全bao等】

Java毕设选题推荐:基于 Spring Boot 的个人随笔博客运维管理系统的设计与实现 基于 Spring Boot 的用户原创博客分享社区【附源码、mysql、文档、调试+代码讲解+全bao等】

博主介绍:✌️码农一枚 ,专注于大学生项目实战开发、讲解和毕业🚢文撰写修改等。全栈领域优质创作者,博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围:&am…

2026/6/18 0:00:24阅读更多 →
JN517x嵌入式开发实战:看门狗、脉冲计数器与I2C接口的深度解析与避坑指南

JN517x嵌入式开发实战:看门狗、脉冲计数器与I2C接口的深度解析与避坑指南

1. 项目概述在嵌入式开发领域,尤其是基于NXP JN517x这类无线微控制器的项目中,系统稳定性和与外设的可靠交互是两大核心挑战。前者关乎产品能否在无人值守的复杂环境中长期运行,后者则决定了设备能否准确感知世界并与其他芯片“对话”。JN517…

2026/6/18 0:00:24阅读更多 →