档案处理

进阶

with open("档案", "w") as f 写档、"r" 读档、"a" 附加;read()/readlines()/for line 逐行读;CSV 用 split(",") 拆栏位;try-except 接住 FileNotFoundError 等异常令程式不崩溃。

适合:中三资讯及通讯科技 · 单元:程式设计进阶 · 建议学习路径第 2/13 课

学完呢课,你会识:
  • 变数随程式结束消失,档案令资料长期保存。
  • with open("档", "模式") as f 是标准写法,自动关档。
  • 三种模式:"r" 读、"w" 写(清空)、"a" 附加(保留)。
文体:编程教学课有声朗读

文体小知识:编程教学课每个概念都配一段可以亲手试的代码例子,照住输入、改一改,最快学会。

资讯及通讯科技Information & Communication Technology

§课文原文 Passage

1程式一结束,变数里的资料就会消失 — 想把成绩、记录留住,就要写入档案。Python 用 open() 开档:open("scores.txt", "w") 以写入模式开档,"r" 是读取,"a" 是附加。最稳阵的写法是 with open("scores.txt", "w") as f: — 离开这个区块时自动关档,不用担心忘记。

2读档三招:f.read() 一次过读出全部内容;f.readlines() 返回逐行的清单;或者 for line in f: 逐行处理。读回来的每一行结尾都带一个换行符 \n,用 line.strip() 可以把它清走。写档用 f.write("小明,85\n") — 记得自己加上 \n,write 不会自动换行。

3CSV(Comma-Separated Values,逗号分隔值)是最常用的资料档格式:一行一笔记录,栏位用逗号隔开,例如 "小明,85,3A"。用 line.split(",") 就可以把一行拆成 ["小明", "85", "3A"],再用 int() 把 "85" 转成数字 85 — Excel 都可以直接开 CSV 档。

4真实的程式一定会遇到意外:档案可能不存在(FileNotFoundError)、文字可能转不成数字(ValueError)。用 try-except 接住这些异常,程式就不会整个崩溃:try: 开档读资料 except FileNotFoundError: print("档案不存在") — 提示用户之后继续行落去,这才是可靠的软件。

1重点摘要 Summary

with open("档案", "w") as f 写档、"r" 读档、"a" 附加;read()/readlines()/for line 逐行读;CSV 用 split(",") 拆栏位;try-except 接住 FileNotFoundError 等异常令程式不崩溃。

2生字卡 Vocabulary

F
File handling档案处理

让程式读取和写入电脑档案,令资料在程式结束后仍能保存。

o
open()开档函数

开启档案的函数,需指明档名与模式,例如 open("a.txt", "r")。

M
Mode "r" / "w" / "a"读取/写入/附加模式

"r" 只读;"w" 写入并清空原有内容;"a" 在档尾继续加入,不破坏原有资料。

w
with ... as f自动关档语法

离开 with 区块时自动关闭档案,是最推荐的档案处理写法。

r
read() / readlines()读取方法

read() 读出全部内容为一个字串;readlines() 读成逐行的清单。

N
Newline character \n换行符

表示「换一行」的特殊符号;write() 要自己加 \n,读回来的行要用 strip() 清走。

C
CSV逗号分隔值档

以逗号分隔栏位的纯文字资料格式,一行一笔记录,Excel 可直接开启。

s
split(",")分割字串

把字串按逗号拆成清单,例如 "小明,85".split(",") 得 ["小明", "85"]。

t
try-except异常处理

把可能出错的代码放进 try,用 except 接住指定异常并处理,令程式不会中断。

3逐步讲解 Steps

  1. 写出第一个档案例如:with open("hello.txt", "w") as f: f.write("Hello!\n")。执行后资料夹里多了一个 hello.txt,内容是 Hello! — "w" 模式档案不存在会自动建立。档案模式决定开档后的行为:"w" 写入、"r" 读取、"a" 附加;hello.txt 建立后可以用文字编辑器打开核对内容,确认程式真的写入成功。
  2. with 自动关档例如:with open("hello.txt", "w") as f: f.write("A") f.write("B"),离开 with 区块时 Python 自动 close();不像 f = open(...) 之后要记得自己呼叫 f.close()。忘记 close() 的档案可能未完全写入磁碟,纪录有机会遗失;with 写法把关档交给 Python,是标准风格。
  3. 读整个档案例如:hello.txt 内容为 Hello!,执行 with open("hello.txt") as f: print(f.read()) 印出 Hello! — 不写模式预设就是 "r"。read() 一次传回整个档案的字串,适合小档案;档案很大时逐行读取更节省记忆体,这个分别在处理大量资料时很重要。
  4. 逐行读取例如:scores.txt 有两行 85 和 90,执行 for line in f: print(line.strip()) 逐行印出 85、90 — strip() 清走行尾的 \n,否则 print 会多跳一行。strip() 只清除字串两端的空白字符,中间不受影响;每行读入都带 \n,先 strip 再处理是固定套路。
  5. "w" 清空 vs "a" 附加例如:旧档内容为 ABC。用 "w" 再写 X,档案变成只有 X(旧内容被清空);用 "a" 再写 X,档案变成 ABCX(保留再加)。想保留纪录就用 "a"。"w" 一开档就立即清空旧内容,即使一个字都不写;"a" 则把位置移到结尾,新资料接在旧纪录之后。日志档几乎都用 "a",因为历史纪录不能被覆写。
  6. 处理 CSV 一行例如:一行为 "小明,85,3A"。parts = line.strip().split(",") 得 ["小明", "85", "3A"];score = int(parts[1]) 把 "85" 变成数字 85,可以拿来计平均。split(",") 按逗号切开字串,返回一个列表;列表由零开始编号,所以 parts[1] 取第二项。成绩要用 int() 转换才能比较大小。
  7. try-except 接住错误例如:try: f = open("data.txt") except FileNotFoundError: print("档案不存在")。data.txt 不存在时程式印出提示而不崩溃;int("abc") 这类转换错误则用 except ValueError: 接住。except 可以串联多个,分别接住不同错误;最后可加 else 在无错误时执行,程式的提示讯息就更清楚。

4图解 Diagrams

Python 档案处理:开・读・写・关 File handlingf = open("notes.txt", "w") # w 写入f.write("今日学会开档!")f.close() # 用完要关"w" 写入清空重写"a" 附加加喺尾,唔删旧"r" 读取打开睇内容应用:程式关机后数据都唔见——写入档案先可以保存成绩、日记、纪录最佳实践:用 with open(...) as f:——自动帮你关档,唔怕漏
图 1:Python 档案处理

5例题示范 Example

例题:scores.txt 内容为一行 "85,90,78"。写程式读取这三个测验分数并计算平均分。

  1. 读档:with open("scores.txt") as f: line = f.read(),得字串 "85,90,78"。
  2. 拆栏位:parts = line.strip().split(","),得 ["85", "90", "78"] — 先 strip 清走可能的换行符。
  3. 转数字:scores = [int(p) for p in parts],得 [85, 90, 78] — 字串清单变数字清单。
  4. 计平均:average = sum(scores) / len(scores) = 253 / 3 ≈ 84.33。
  5. 答案:三个分数为 85、90、78,平均分约 84.33 分。

6常见错误 Mistakes

✗ 「呼叫 open() 之后不必 close,无所谓。」
✓ 不关档资料可能未写入磁碟就遗失;用 with open(...) as f 让 Python 自动处理。
✗ 「用 "w" 开旧档,旧内容会保留。」
✓ "w" 一开档就立即清空原有内容;想保留旧资料、在后面加新纪录,要用 "a" 模式。
✗ 「从档案读到的 "85" 可以直接 + 5 来计算。」
✓ 读回来的全部是字串:"85" + 5 会出错;先 int("85") 变成数字 85 才能计算。
✗ 「逐行读时 print(line) 会多空行,是档案坏了。」
✓ 那是行尾的换行符 \n;用 line.strip() 清走就正常。
✗ 「档案不存在时程式崩溃是正常的,没办法。」
✓ 用 try-except 接住 FileNotFoundError,印出友好提示,程式可以继续运行。

75 题快测 Quick check

Q1哪个开档模式会清空档案原有内容?A. "r" B. "w" C. "a"

Q2with open("a.txt") as f: 的最大好处是什么?

Q3"85,90".split(",") 的结果是什么?

Q4int("abc") 会发生什么事?

Q5open("data.txt") 时档案不存在,会出现哪种异常?

8重点回顾 Recap

  • 变数随程式结束消失,档案令资料长期保存。
  • with open("档", "模式") as f 是标准写法,自动关档。
  • 三种模式:"r" 读、"w" 写(清空)、"a" 附加(保留)。
  • 读档三招:read() 全部、readlines() 逐行清单、for line 逐行;strip() 清走 \n。
  • CSV 用 split(",") 拆栏位、int() 转数字;try-except 接住 FileNotFoundError 和 ValueError。

同级其他科

同一科其他级别