第 30 课 · 阶段五 · 文件与异常
文件读写
程序跑完数据就没了,怎么把数据留下来?这一课学习文件读写:open 模式、read/write、with 语句与编码处理。
🎯 学完本课你将掌握
- 理解 open 的读写模式
- 用 with 安全读写文件
- 掌握按行读取与写回
- 处理文件编码问题
一、打开文件:open()
语法:open(文件名, 模式, encoding=编码)。常用模式:r 读、w 写(覆盖)、a 追加。
| 模式 | 含义 | 文件不存在 |
|---|---|---|
| r | 只读 | 报错 |
| w | 写入(清空覆盖) | 自动创建 |
| a | 追加 | 自动创建 |
| r+ | 读写 | 报错 |
| b | 二进制模式(与上组合如 rb/wb) | — |
二、写入文件
写入文件.py
1with open("note.txt", "w", encoding="utf-8") as f:2 f.write("第一行3")4 f.write("第二行5")67# 再次打开确认8with open("note.txt", "r", encoding="utf-8") as f:9 print(f.read())三、with 语句的妙处
✅ 要点
with open(...) as f: 会在代码块结束后自动关闭文件,即使中途报错也会关闭。忘写 f.close() 是新手常犯错误,用 with 就彻底避免了。
四、读取文件的四种方式
读取文件.py
1with open("note.txt", "r", encoding="utf-8") as f:2 print(f.read()) # 1. 一次读完所有内容34with open("note.txt", "r", encoding="utf-8") as f:5 print(f.readline()) # 2. 读一行67with open("note.txt", "r", encoding="utf-8") as f:8 lines = f.readlines() # 3. 读成列表,每行一个元素9 print(lines)1011with open("note.txt", "r", encoding="utf-8") as f:12 for line in f: # 4. 逐行遍历(大文件推荐)13 print(line.strip())五、追加内容
追加写入.py
1with open("note.txt", "a", encoding="utf-8") as f:2 f.write("追加的第三行3")六、文件路径与目录
路径处理.py
1import os2# 相对路径 vs 绝对路径3# with open("data/score.txt", "w") as f: ... 需要 data 目录存在4os.makedirs("data", exist_ok=True) # 确保目录存在5with open("data/score.txt", "w", encoding="utf-8") as f:6 f.write("987878")七、编码问题
⚠️ 注意
Windows 下用 UTF-8 写入、其他程序按 GBK 读取会乱码。统一指定 encoding='utf-8' 是当前最佳实践。若读取乱码可尝试 encoding='gbk'。
八、常见错误与解决
常见错误与解决
| 错误现象 | 原因 / 解决方法 |
|---|---|
FileNotFoundError | 读的文件不存在;检查路径与文件名,或先创建文件。 |
UnicodeDecodeError | 编码不对,指定正确的 encoding(utf-8 或 gbk)再读。 |
PermissionError | 文件被其他程序占用(如 Word 打开中),先关闭再运行。 |
✍️ 小练习
写程序:让用户输入 3 句话,存入 diary.txt;再读取该文件,逐行打印并加上行号。
📌 本节小结
文件读写四件套:open 选模式(r/w/a)、with 自动关闭、按行读用 for、中文统一 UTF-8。数据能存盘了,你的程序才算真正“落地”。