> **GESP等级：四级 | 考级考点：GESP Python 四级**

# 第09节 文件小管家

**课程主题**：Python文件读写操作入门
**课时**：60分钟
**授课对象**：7-10岁少儿
**教学形式**：五段式教学（10min导入 + 20min知识点 + 10min演示 + 15min实操 + 5min小测）

---

## 一、教学目标

### 知识与技能
1. 理解文件的概念——电脑里的"日记本"
2. 掌握打开文件的三把钥匙：r（读）、w（写）、a（追加）
3. 学会用 .read() 和 .readline() 读取文件内容
4. 学会用 .write() 向文件写入内容
5. 掌握 .close() 关闭文件的好习惯
6. 理解 with 语句的便利——自动关门
7. 了解文件路径的基本概念

### 过程与方法
- 通过"日记本"类比理解文件操作
- 通过动手实践建立读写文件的肌肉记忆
- 通过龟图可视化理解文件处理流程

### 情感态度价值观
- 培养"用完关好"的好习惯（close文件）
- 建立数据持久化的概念——程序结束数据还在
- 培养细心阅读错误提示的能力（FileNotFoundError等）

---

## 二、教学重难点

### 重点
- open()的三种模式：r/w/a
- read()和write()的基本使用
- close()的重要性

### 难点
- 文件路径的理解（相对路径 vs 绝对路径）
- w模式会覆盖原有内容 vs a模式追加
- with语句的原理理解

---

## 三、教学准备

| 项目 | 内容 |
|------|------|
| 硬件 | 电脑（每生一台）、投影仪 |
| 软件 | Python IDLE 或 VS Code |
| 教具 | 实物日记本、文件夹、钥匙模型 |
| 素材 | 预制的 story.txt、poem.txt 文件 |

---

## 四、教学过程

---

### 第一阶段：故事导入（10分钟）

#### 1.1 "日记本和文件夹"故事

**老师**：（拿出一个真实的日记本）小朋友们看，这是什么？

**学生**：日记本/笔记本！

**老师**：对了！平时我们在日记本上写东西，过几天再翻开来，字还在不在？

**学生**：在！

**老师**：电脑也是一样的！电脑里有一种叫"文件"的东西，就像电子日记本。程序可以把东西写进去，下次再打开看，内容还在！

**过渡**：（打开电脑上的一个文件夹）看，这就是电脑里的"文件夹"。里面这些就是文件——有图片文件、音乐文件、文字文件。今天我们要学的是——**文字文件**！

#### 1.2 身体锚点引入

老师站起来做动作，学生跟着做：

| 动作 | 含义 | 口诀 |
|------|------|------|
| 拧门把手 | open - 打开文件 | "open开门" |
| 手捧书状 | read - 读取内容 | "read读书" |
| 做写字状 | write - 写入内容 | "write写字" |
| 关门的动作 | close - 关闭文件 | "close关门" |

**全班一起做**：拧把手→读书→写字→关门！再来一遍！

#### 1.3 引出课题

"今天我们就来学习**Python文件小管家**——教电脑怎么打开日记本、读内容、写新内容，最后关好门！"

---

### 第二阶段：知识点讲解（20分钟）

---

#### 2.1 打开文件 —— open() 开门

**概念**：想要操作文件，第一步就是"打开"它。

```python
# 打开文件的基本语法
f = open("文件名", "模式")
```

**三种模式（三把钥匙）**：

| 模式 | 英文 | 含义 | 能不能读 | 能不能写 | 注意 |
|------|------|------|---------|---------|------|
| "r" | read | 读取模式 | 可以 | 不可以 | 文件必须存在 |
| "w" | write | 写入模式 | 不可以 | 可以 | 文件存在会覆盖，不存在会创建 |
| "a" | append | 追加模式 | 不可以 | 可以 | 在末尾添加内容 |

**记忆口诀**：
> "r=读(read)，w=写(write)，a=追加(add)"
> "open打开read读，write写入close关，with帮你自动管"

**老师演示**：
```python
# 打开一个文件准备读取
f = open("story.txt", "r")  # r模式，文件必须在
```

**小互动**：老师问"要读文件用什么模式？"学生齐答"r！"（同时做读书动作）

---

#### 2.2 读取内容 —— read() 和 readline()

##### read() —— 一口气读完

```python
f = open("story.txt", "r")
content = f.read()   # 把整个文件内容读进变量
print(content)       # 打印出来看看
f.close()
```

**比喻**：read() 就像用吸管一口气把一整杯奶茶喝完！

##### readline() —— 读一行

```python
f = open("story.txt", "r")
line1 = f.readline()  # 读第一行
print(line1)          # 打印第一行
line2 = f.readline()  # 读第二行
print(line2)          # 打印第二行
f.close()
```

**比喻**：readline() 就像一根吸管吸一口，停一下，再吸一口。

**老师演示对比**：
- read() —— 一次性全部拿到
- readline() —— 一行一行拿

##### 用 for 循环读全部行

```python
f = open("story.txt", "r")
for line in f:       # 文件对象可以直接用在for循环里
    print(line)      # 一行一行打印
f.close()
```

---

#### 2.3 写入内容 —— write()

```python
f = open("output.txt", "w")   # w模式，会覆盖已有内容
f.write("Hello, World!")      # 写入文字
f.write("\n")                 # 写入换行
f.write("这是第二行！")
f.close()
```

**注意事项**：
- write() 不会自动换行！需要自己加 \n
- "w"模式会**覆盖**原有内容——就像在白纸上重新写
- "a"模式会**追加**——就像在日记本最后接着写

**演示对比**：

```python
# w模式：覆盖
f = open("test.txt", "w")
f.write("新内容")
f.close()

# a模式：追加
f = open("test.txt", "a")
f.write("追加的内容")  # 在末尾添加，原有内容还在
f.close()
```

**记忆钩子**：
> "w模式像新白纸，a模式像接着写"

---

#### 2.4 关闭文件 —— close()

**重要性**：
- open() 就像开门，用完要关门！
- 不关文件可能导致数据丢失
- 不关文件会浪费电脑资源

```python
# 正确做法
f = open("test.txt", "r")
print(f.read())
f.close()  # 用完一定关！
```

**身体锚点**：每次写 close() 都做一个关门的动作！

---

#### 2.5 with 语句 —— 自动关门

**问题**：有时候我们会忘记 close()，怎么办？

**答案**：用 with 语句！它帮我们自动关门！

```python
# with语句：自动关闭文件
with open("story.txt", "r") as f:
    content = f.read()
    print(content)
# 到这里文件自动关闭，不用写close()
```

**比喻**：with 就像一个智能门禁——你进去后它自己锁门！

**口诀**：
> "with open as f，自动关文件，省心又安全！"

**完整对比**：

```python
# 传统方式
f = open("test.txt", "r")
print(f.read())
f.close()

# with方式（推荐）
with open("test.txt", "r") as f:
    print(f.read())
# 自动关闭
```

---

#### 2.6 文件路径概念

**同目录**：只用写文件名
```python
with open("story.txt", "r") as f:  # 和程序在同一文件夹
```

**不同目录**：需要写路径
```python
with open("myfolder/story.txt", "r") as f:  # 子文件夹
```

**绝对路径**：完整的地址
```python
with open("C:/myfiles/story.txt", "r") as f:  # 完整路径
```

**比喻**：
- 同目录 = "就在我房间"
- 子目录 = "在隔壁房间"
- 绝对路径 = "写完整地址，从小区到门牌号"

---

### 第三阶段：教师演示（10分钟）

#### 3.1 演示1：读取文件并显示

```python
# 演示：读取story.txt的内容
# 首先创建一个story.txt
with open("story.txt", "w", encoding="utf-8") as f:
    f.write("从前有座山\n")
    f.write("山里有座庙\n")
    f.write("庙里有个老和尚\n")
    f.write("老和尚在给小和尚讲故事\n")

# 读取并显示
print("=== 读取故事 ===")
with open("story.txt", "r", encoding="utf-8") as f:
    for line in f:
        print(line, end="")
```

**老师操作**：在屏幕上一步步输入，让学生看到文件创建的过程。

#### 3.2 演示2：复制文件内容

```python
# 从story.txt读取，写入copy.txt
with open("story.txt", "r", encoding="utf-8") as f:
    content = f.read()

with open("copy.txt", "w", encoding="utf-8") as f:
    f.write(content)

print("文件复制完成！")
```

**老师**："看，我们把故事复制了一份！这就是文件拷贝的原理。"

#### 3.3 演示3：turtle画文件读取流程图

打开 01_文件小管家.py 运行，让乌龟展示读取文件→处理→写入的过程。

---

### 第四阶段：学生实操（15分钟）

#### 实操任务1：我的第一个文件（5分钟）

**要求**：
1. 用 w 模式创建一个 hello.txt
2. 写入你的名字和年龄
3. 关闭文件
4. 用 r 模式读取出来验证

**参考代码**：
```python
# 写入
f = open("hello.txt", "w", encoding="utf-8")
f.write("我叫小明\n")
f.write("我今年8岁\n")
f.close()

# 读取
f = open("hello.txt", "r", encoding="utf-8")
print(f.read())
f.close()
```

#### 实操任务2：日记本程序（5分钟）

**要求**：
1. 用 a 模式打开 diary.txt
2. 输入今天的心情（用 input()）
3. 写入文件
4. 读取整个日记看看

**参考代码**：
```python
# 写日记
mood = input("今天的心情是：")
with open("diary.txt", "a", encoding="utf-8") as f:
    f.write(mood + "\n")

# 读日记
with open("diary.txt", "r", encoding="utf-8") as f:
    print("=== 我的日记 ===")
    print(f.read())
```

#### 实操任务3：文件合并（5分钟）

**要求**：
1. 创建两个文件 a.txt 和 b.txt
2. 分别写入一些内容
3. 读取两个文件的内容，合并写入 c.txt

```python
# 创建a.txt
with open("a.txt", "w", encoding="utf-8") as f:
    f.write("这是A文件的内容\n")

# 创建b.txt
with open("b.txt", "w", encoding="utf-8") as f:
    f.write("这是B文件的内容\n")

# 合并
with open("a.txt", "r", encoding="utf-8") as f:
    a_content = f.read()

with open("b.txt", "r", encoding="utf-8") as f:
    b_content = f.read()

with open("c.txt", "w", encoding="utf-8") as f:
    f.write(a_content)
    f.write(b_content)

print("合并完成！请查看c.txt")
```

---

### 第五阶段：小测验（5分钟）

#### 题目1（选择题）
打开文件读取内容，应该用什么模式？
A. "w"  B. "r"  C. "a"  D. "d"

**答案**：B

#### 题目2（判断题）
用"w"模式打开一个已有文件，原来的内容还在。（对/错）

**答案**：错。w模式会覆盖原有内容。

#### 题目3（填空题）
____ 语句可以帮我们自动关闭文件，不用写 close()。

**答案**：with

#### 题目4（连线题）
请连线：

open("f.txt", "r") → 读取模式
open("f.txt", "w") → 写入模式
open("f.txt", "a") → 追加模式

#### 题目5（代码阅读）
```python
with open("test.txt", "w") as f:
    f.write("Hello")
    
with open("test.txt", "a") as f:
    f.write(" World")
    
with open("test.txt", "r") as f:
    print(f.read())
```

请问输出什么？
A. Hello  B. Hello World  C. World  D. 报错

**答案**：B。先写Hello，再用a追加空格+World，结果是"Hello World"

---

## 五、板书设计

```
+========================================+
|          文件小管家                      |
+========================================+
|                                         |
|  open() → 开门                         |
|    r = read   读                       |
|    w = write  写（覆盖）               |
|    a = append 追加                     |
|                                         |
|  read()    → 读完整个                  |
|  readline() → 读一行                   |
|  write()   → 写内容                    |
|  close()   → 关门                      |
|                                         |
|  with open(...) as f:  ← 自动关门      |
+========================================+
```

---

## 六、课后作业说明

参见《课后练习_第09节.md》文件。

**作业要点**：
1. 文件读写基础练习——巩固三种模式
2. 文件内容统计——综合运用
3. 创意挑战——自己写一个"留言本"程序

---

## 七、常见错误与应对

| 错误类型 | 错误信息 | 原因 | 解决方法 |
|----------|----------|------|---------|
| 文件不存在 | FileNotFoundError | 用r模式打开不存在的文件 | 检查文件名，或用w模式创建 |
| 权限错误 | PermissionError | 文件被其他程序占用 | 关闭其他程序 |
| 编码错误 | UnicodeDecodeError | 文件编码问题 | 加上 encoding="utf-8" |
| 忘记关闭 | 无报错但数据丢失 | 没写close() | 用with语句自动管理 |

---

## 八、教学反思（教师填写）

| 维度 | 评价 | 备注 |
|------|------|------|
| 导入环节 | ___/5 | 故事是否吸引学生 |
| 知识点讲解 | ___/5 | 学生是否理解模式区别 |
| 演示环节 | ___/5 | turtle演示是否直观 |
| 实操环节 | ___/5 | 学生完成度如何 |
| 小测环节 | ___/5 | 正确率如何 |

---

## 九、拓展延伸

### 对于学有余力的学生
1. 尝试用 with open() 同时打开多个文件
2. 研究 encoding="utf-8" 是什么意思
3. 试试不同编码打开同一个文件的效果

### 家庭互动
- 和爸爸妈妈一起，用Python给家里人写一封"电子信"存成文件
- 看看电脑里各种文件（图片、音乐）用记事本打开会怎样

---

*教案编写日期：2026年6月*
*适用阶段：19_文件与算法入门*
