我們學會了超強大的 try-except 安全氣囊,讓程式即使遇到亂輸入的搗蛋鬼也能優雅地活下來。
不過寫的任何小程式,都有一個共同的遺憾:「只要一關掉 VS Code,或者終端機一關閉,所有的紀錄、分數和進度就通通不見了。」
為了讓程式擁有「永恆的記憶」,我們今天要學會用 Python 讀取與寫入外部檔案(File I/O)。
📝 傳統開檔 vs 現代優雅的 with open() 語法
在過去,很多老舊的教材會教你這樣開檔案:
#❌ 舊式寫法,不建議使用
f = open("note.txt", "w")
f.write("哈囉世界")
f.close() # ⚠️ 萬一忘記寫這行,檔案就會一直被鎖定占用!
這種寫法最大的危機在於,如果你寫完資料卻忘記呼叫 f.close() 關閉檔案,這個檔案就會一直被 Python 狠狠地霸佔著,不僅佔用電腦記憶體,其他軟體也無法打開它。
因此,現在全天下的 Python 工程師都統一改用最安全、最現代化的 with open() 語法:
with open("note.txt", "w", encoding="utf-8") as f:
f.write("哈囉!這是我的技術日記。")
🧠 拆解這行魔法咒語:
• with:這是 Python 的貼心管家。它保證不論底下的程式碼順利執行完,還是中間突然爆炸,只要離開了這個縮排區塊,管家就會自動幫你把檔案關得好好的(自動 .close())!
• "note.txt":你想打開或創造的檔案名稱。
• "w":代表寫入模式(Write)。
⚠️ 注意:如果這個檔案原本就存在,"w" 模式會無情地把裡面的舊內容通通擦掉、覆蓋掉!如果檔案不存在,它會自動幫你生出一個新檔案。
• encoding="utf-8":這是預防寫入中文時出現亂碼的「防爆繁體中文密碼」,建議每次開檔都順手打上去。
• as f:幫這個被打開的檔案臨時取個小名叫 f,方便底下的 f.write() 去指名道醒地寫入。
🔄 讀取檔案:把筆記本的記憶召喚出來!
既然會寫入檔案了,那我們要怎麼把檔案裡的文字讀回 Python 裡呢?非常簡單,把 "w" 改成 "r"(Read,讀取模式) 即可:
with open("note.txt", "r", encoding="utf-8") as f:
content = f.read() # 把檔案裡的文字一口氣讀出來
print("以下是檔案內讀到的內容:")
print(content)
執行這段程式碼,你會發現 Python 順利把硬碟裡的 note.txt 打開,並將裡面的「哈囉!這是我的技術日記。」完完整整地秀在螢幕上了!
📌 我不想覆蓋舊資料!加開分頁的 "a" 模式
剛剛說到 "w" 模式會把舊資料擦掉,那如果我們想寫的是「技術日記」,每天都要「往後黏貼新日記」,該怎麼辦?
請把模式改成 "a"(Append,附加模式):
with open("diary.txt", "a", encoding="utf-8") as f:
f.write("第一天:學會了變數。\n")
f.write("第二天:收服了安裝大魔王。\n")
(註:\n 是程式界通用的「換行符號」,不加它的話,所有的字都會像火車一樣全部擠在同一行唷!)
每天執行一次這段 Code,你會發現 diary.txt 裡面的句子越來越長,舊的紀錄完全沒有消失,這才是寫日記的正確姿勢!
今日結語:你幫程式打破金魚腦了嗎?
今天我們學會了用 with open() 搭配 "r"、"w"、"a" 三大模式,成功幫程式打破了短暫的金魚記憶。
到此為止,你已經具備了離線處理所有資料的能力。接下來,我們要正式擴大版圖,把觸角延伸到網際網路的世界了!
接下來是Python 最期待的章節——網路爬蟲!我們要學會用 requests 模組,大膽地去跟全世界的網站伺服器打招呼、拿包裹!
🧑💻 今日小作業
動手寫一個「簡易日記備忘錄」: