檔案處理

進階

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。

同級其他科

同一科其他級別