第 30 课 · 阶段五 · 文件与异常

文件读写

程序跑完数据就没了,怎么把数据留下来?这一课学习文件读写:open 模式、read/write、with 语句与编码处理。

第 30 课阶段五 · 文件与异常难度:进阶建议时长:40 分钟关键词: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")
6
7# 再次打开确认
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. 一次读完所有内容
3
4with open("note.txt", "r", encoding="utf-8") as f:
5 print(f.readline()) # 2. 读一行
6
7with open("note.txt", "r", encoding="utf-8") as f:
8 lines = f.readlines() # 3. 读成列表,每行一个元素
9 print(lines)
10
11with 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 os
2# 相对路径 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("98
787
8")

七、编码问题

⚠️ 注意
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。数据能存盘了,你的程序才算真正“落地”。