档案处理
进阶with open("档案", "w") as f 写档、"r" 读档、"a" 附加;read()/readlines()/for line 逐行读;CSV 用 split(",") 拆栏位;try-except 接住 FileNotFoundError 等异常令程式不崩溃。
- 变数随程式结束消失,档案令资料长期保存。
- with open("档", "模式") as f 是标准写法,自动关档。
- 三种模式:"r" 读、"w" 写(清空)、"a" 附加(保留)。
文体小知识:编程教学课每个概念都配一段可以亲手试的代码例子,照住输入、改一改,最快学会。
§课文原文 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
让程式读取和写入电脑档案,令资料在程式结束后仍能保存。
开启档案的函数,需指明档名与模式,例如 open("a.txt", "r")。
"r" 只读;"w" 写入并清空原有内容;"a" 在档尾继续加入,不破坏原有资料。
离开 with 区块时自动关闭档案,是最推荐的档案处理写法。
read() 读出全部内容为一个字串;readlines() 读成逐行的清单。
表示「换一行」的特殊符号;write() 要自己加 \n,读回来的行要用 strip() 清走。
以逗号分隔栏位的纯文字资料格式,一行一笔记录,Excel 可直接开启。
把字串按逗号拆成清单,例如 "小明,85".split(",") 得 ["小明", "85"]。
把可能出错的代码放进 try,用 except 接住指定异常并处理,令程式不会中断。
3逐步讲解 Steps
- 写出第一个档案例如:with open("hello.txt", "w") as f: f.write("Hello!\n")。执行后资料夹里多了一个 hello.txt,内容是 Hello! — "w" 模式档案不存在会自动建立。档案模式决定开档后的行为:"w" 写入、"r" 读取、"a" 附加;hello.txt 建立后可以用文字编辑器打开核对内容,确认程式真的写入成功。
- with 自动关档例如:with open("hello.txt", "w") as f: f.write("A") f.write("B"),离开 with 区块时 Python 自动 close();不像 f = open(...) 之后要记得自己呼叫 f.close()。忘记 close() 的档案可能未完全写入磁碟,纪录有机会遗失;with 写法把关档交给 Python,是标准风格。
- 读整个档案例如:hello.txt 内容为 Hello!,执行 with open("hello.txt") as f: print(f.read()) 印出 Hello! — 不写模式预设就是 "r"。read() 一次传回整个档案的字串,适合小档案;档案很大时逐行读取更节省记忆体,这个分别在处理大量资料时很重要。
- 逐行读取例如:scores.txt 有两行 85 和 90,执行 for line in f: print(line.strip()) 逐行印出 85、90 — strip() 清走行尾的 \n,否则 print 会多跳一行。strip() 只清除字串两端的空白字符,中间不受影响;每行读入都带 \n,先 strip 再处理是固定套路。
- "w" 清空 vs "a" 附加例如:旧档内容为 ABC。用 "w" 再写 X,档案变成只有 X(旧内容被清空);用 "a" 再写 X,档案变成 ABCX(保留再加)。想保留纪录就用 "a"。"w" 一开档就立即清空旧内容,即使一个字都不写;"a" 则把位置移到结尾,新资料接在旧纪录之后。日志档几乎都用 "a",因为历史纪录不能被覆写。
- 处理 CSV 一行例如:一行为 "小明,85,3A"。parts = line.strip().split(",") 得 ["小明", "85", "3A"];score = int(parts[1]) 把 "85" 变成数字 85,可以拿来计平均。split(",") 按逗号切开字串,返回一个列表;列表由零开始编号,所以 parts[1] 取第二项。成绩要用 int() 转换才能比较大小。
- try-except 接住错误例如:try: f = open("data.txt") except FileNotFoundError: print("档案不存在")。data.txt 不存在时程式印出提示而不崩溃;int("abc") 这类转换错误则用 except ValueError: 接住。except 可以串联多个,分别接住不同错误;最后可加 else 在无错误时执行,程式的提示讯息就更清楚。
4图解 Diagrams
5例题示范 Example
例题:scores.txt 内容为一行 "85,90,78"。写程式读取这三个测验分数并计算平均分。
- 读档:with open("scores.txt") as f: line = f.read(),得字串 "85,90,78"。
- 拆栏位:parts = line.strip().split(","),得 ["85", "90", "78"] — 先 strip 清走可能的换行符。
- 转数字:scores = [int(p) for p in parts],得 [85, 90, 78] — 字串清单变数字清单。
- 计平均:average = sum(scores) / len(scores) = 253 / 3 ≈ 84.33。
- 答案:三个分数为 85、90、78,平均分约 84.33 分。
6常见错误 Mistakes
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。