檔案讀寫
程式跑完,變數裡的資料就沒了。想把結果留下來、下次再讀回來,就要寫進檔案。這一章看怎麼讀寫檔案。
用 open() 打開檔案,第一個參數是檔名,第二個是模式:"w" 是寫入(write)、"r" 是讀取(read)。搭配 with,區塊結束時檔案會自動關好。寫入用 write(),讀取用 read():
with open("note.txt", "w", encoding="utf-8") as f: f.write("第一行\n") f.write("第二行\n")
with open("note.txt", "r", encoding="utf-8") as f: content = f.read()
print(content)"w" 模式會把檔案從頭寫過:檔案不存在就新建,已經存在就把舊內容整個蓋掉,要小心。\n 是換行符號,讓每筆資料各自成一行。
檔案讀進來常常要逐行處理。直接用 for 走過打開的檔案,每一圈就是一行。行尾會帶著換行符號,通常用 strip() 把它去掉:
with open("fruits.txt", "w", encoding="utf-8") as f: f.write("蘋果\n") f.write("香蕉\n") f.write("橘子\n")
with open("fruits.txt", "r", encoding="utf-8") as f: for line in f: print(line.strip())如果想一次把所有行讀成一個串列,用 readlines()。每個元素是一行,行尾一樣帶著換行符號:
with open("data.txt", "w", encoding="utf-8") as f: f.write("第一行\n第二行\n第三行\n")
with open("data.txt", "r", encoding="utf-8") as f: lines = f.readlines()
print(lines)print(len(lines))另一個常見做法是先用 read() 讀進整份內容,再用字串的 splitlines() 一次切成一行一行,而且會順便去掉換行符號:
with open("fruits.txt", "w", encoding="utf-8") as f: f.write("蘋果\n香蕉\n橘子\n")
with open("fruits.txt", "r", encoding="utf-8") as f: text = f.read()
for line in text.splitlines(): print(line)附加:不覆蓋舊內容
Section titled “附加:不覆蓋舊內容”如果想在檔案後面接著寫、而不是蓋掉,就用 "a"(append,附加)模式:
with open("log.txt", "w", encoding="utf-8") as f: f.write("第一筆\n")
with open("log.txt", "a", encoding="utf-8") as f: f.write("第二筆\n")
with open("log.txt", "r", encoding="utf-8") as f: print(f.read())先用 "w" 寫了第一筆,再用 "a" 補上第二筆,最後讀回來,兩筆都在。記錄日誌、持續累積資料時,附加模式很好用。
關於 with 和編碼
Section titled “關於 with 和編碼”檔案用完一定要關掉,否則資料可能還沒真正寫進去。with open(...) as f: 的好處,就是不管區塊裡發生什麼事,離開時都會自動幫你把檔案關好,不用自己記得呼叫 close()。
另外,例子裡都寫了 encoding="utf-8"。處理中文時這個很重要:不指定的話,有些系統(特別是 Windows)會用別的編碼,讀寫中文就容易變成亂碼。養成習慣加上它,中文就不會出問題。