在學習 Python 的過程中,我們一開始寫的程式,大多數都只是在記憶體裡運算,輸出結果停留在螢幕上。雖然可以完成一些小任務,但這樣的程式仍然是「短暫」的 —— 一旦結束,所有結果就消失不見了。
那麼,如何讓程式記住我們的成果?答案就是 檔案輸入輸出(File I/O)。透過讀取檔案,你的程式可以存取外部的資料與設定;透過寫入檔案,你的程式可以留下結果,與其他系統交換訊息。從數據分析、日誌記錄,到應用程式設定檔,檔案處理幾乎無所不在。
什麼是檔案?為什麼需要檔案 I/O?
檔案是電腦儲存和組織數據的方式。它們是資料的容器,可以是任何內容:
- 文字文件(如 .txt, .py, .html)
- 圖像檔案(如 .jpg, .png)
- 音頻檔案(如 .mp3, .wav)
- 結構化數據(如 .csv, .json)
檔案 I/O(輸入/輸出)是程式與外部檔案交互的過程。當你保存文檔、下載歌曲、發送電子郵件時,你都在創建檔案。
學習檔案 I/O 使你能夠:存儲程式數據、讀取配置信息、處理大型數據集、與其他程式共享信息。

使用 Python 讀取檔案
with open('real_cool_document.txt') as cool_doc:
cool_contents = cool_doc.read
()
print(cool_contents)
open()
函數創建一個指向檔案的檔案對象。第一個參數是檔案名稱。預設情況下,檔案以讀取模式(’r’)打開。
with
關鍵字創建一個上下文管理器,它會自動處理檔案的打開和關閉,確保程式執行完畢後資源被正確釋放。
read()
方法讀取整個檔案的內容並將其作為字符串返回。
逐行讀取檔案
使用 readlines()
讀取所有行到一個列表中
with open('keats_sonnet.txt') as file:
lines = file.readlines()
for line in lines:
print(line)
直接迭代檔案對象
更高效的方法
with open('keats_sonnet.txt') as file:
for line in file:
print(line)
使用 readline()
一次讀取一行
with open('file.txt') as file:
first_line = file.readline()
second_line = file.readline()
當處理大型檔案時,逐行讀取比一次讀取整個檔案更有效率,因為它使用更少的記憶體。每次調用 readline()
都會讀取下一行,如果已到檔案末尾則返回空字串。
寫入檔案
寫入模式 (‘w’)
with open('generated_file.txt', 'w') as gen_file:
gen_file.write("What an incredible file!")
注意:使用 ‘w’ 模式會創建新檔案或完全覆蓋現有檔案!
附加模式 (‘a’)
with open('generated_file.txt', 'a') as gen_file:
gen_file.write("\n... and it still is")
使用 ‘a’ 模式會將內容添加到檔案末尾,而不會刪除現有內容。
選擇正確的模式非常重要:’w’ 用於創建新檔案或覆蓋現有檔案,’a’ 用於保留現有內容並添加新內容。

什麼是 CSV 檔案?

CSV(Comma-Separated Values,逗號分隔值)是一種用於存儲表格數據的簡單文件格式。它通常用於在不同應用程式之間交換數據,特別是從電子表格軟體(如 Microsoft Excel 或 Google Sheets)匯出數據。
CSV 檔案的特點:
- 每行對應表格中的一行
- 字段之間用分隔符(通常是逗號)分隔
- 第一行通常包含欄位名稱(標題行)
- 是純文本檔案,可以用任何文本編輯器打開
讀取 CSV 檔案
CSV 檔案內容示例
Name,Username,Email
Roger Smith,rsmith,wigginsryan@yahoo.com
Michelle Beck,mlbeck,hcosta@hotmail.com
Ashley Barker,a_bark_x,a_bark_x@turner.com
Lynn Gonzales,goodmanjames,lynniegonz@hotmail.com
使用 csv.DictReader
import csv
email_list = []
with open('users.csv', newline='') as users_csv:
user_reader = csv.DictReader(users_csv)
for row in user_reader:
email_list.append(row['Email'])
print(email_list)
csv.DictReader
將 CSV 檔案的每一行轉換為 Python 字典,其中字典的鍵是 CSV 檔案的標題行中的欄位名稱。這使得通過名稱而不是索引訪問數據變得更加容易。
參數 newline=''
防止因數據中的換行符而錯誤地解析行。
寫入 CSV 檔案
import csv
data = [
{'name': '張三', 'userid': 6712359021, 'is_admin': False},
{'name': '李四', 'userid': 2525942, 'is_admin': False},
{'name': '王五', 'userid': 15890235, 'is_admin': False},
{'name': '趙六', 'userid': 572189563, 'is_admin': True}
]
with open('output.csv', 'w', newline='') as output_csv:
fields = ['name', 'userid', 'is_admin']
output_writer = csv.DictWriter(output_csv, fieldnames=fields)
output_writer.writeheader() # 寫入標題行
for item in data:
output_writer.writerow(item) # 寫入數據行
生成的 CSV 檔案內容
name,userid,is_admin
張三,6712359021,False
李四,2525942,False
王五,15890235,False
趙六,572189563,True
什麼是 JSON 檔案?
JSON(JavaScript Object Notation)
- 輕量級的數據交換格式
- 基於 JavaScript 的語法,但獨立於編程語言
- 人類可讀性強,機器也容易解析
- 支持複雜的嵌套數據結構
- 廣泛用於 Web API 和配置檔案
JSON 格式與 Python 字典非常相似,這使得它在 Python 中特別易於使用。
讀取 JSON 檔案
JSON 檔案內容
{
"user": "ellen_greg",
"action": "purchase",
"item_id": "14781239",
"price": 19.99
}
Python 代碼
import json
with open('purchase_14781239.json') as purchase_json:
purchase_data = json.load(purchase_json)
print(purchase_data['user']) # 輸出: ellen_greg
print(purchase_data['price']) # 輸出: 19.99
json.load()
方法將 JSON 檔案解析為 Python 對象。JSON 對象會被轉換為 Python 字典,JSON 數組會被轉換為 Python 列表。
這種轉換使得在 Python 中處理 JSON 數據變得非常直觀。你可以像操作普通 Python 對象一樣操作從 JSON 中載入的數據。
寫入 JSON 檔案
Python 代碼
import json
data = {
"eventId": 674189,
"dateTime": "2015-02-12T09:23:17.511Z",
"chocolate": "Semi-sweet Dark",
"isTomatoAFruit": True
}
with open('output.json', 'w') as json_file:
json.dump(data, json_file, indent=2)
生成的 JSON 檔案內容
{
"eventId": 674189,
"dateTime": "2015-02-12T09:23:17.511Z",
"chocolate": "Semi-sweet Dark",
"isTomatoAFruit": true
}
indent=2
參數使輸出的 JSON 更易讀,每個嵌套層次縮進 2 個空格。
Python 的 True
值在 JSON 中會變成小寫的 true
。
結語
無論是處理文字、管理設定,還是分析結構化數據,這些技能都能幫助你將程式碼從「單純執行」提升到「解決實際問題」。