檔案 I/O 是程式設計基礎。Python 內建 open() 函式,配合 with 陳述式能安全、簡潔地處理檔案。本文涵蓋文字、二進位、編碼轉換等核心技巧。
f = open('/path/to/file.txt', 'r') # 'r' 表示唯讀
content = f.read() # 一次讀完全檔
f.close()
若檔案不存在會拋出 IOError(Python 2)或 FileNotFoundError(Python 3)。
# 傳統寫法
try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
# 推薦:with 區塊自動關閉
with open('/path/to/file', 'r') as f:
print(f.read())
read(size):每次讀指定位元組數。readline():逐行讀取。readlines():一次讀全檔並回傳列表。for line in f.readlines():
print(line.strip()) # 移除換行符
擁有 read() 方法的物件統稱為 file-like Object,包含記憶體串流(StringIO)、網路串流等,實現多型。
with open('image.jpg', 'rb') as f:
data = f.read() # 回傳 bytes 物件
with open('gbk.txt', 'rb') as f:
text = f.read().decode('gbk')
import codecs
with codecs.open('gbk.txt', 'r', 'gbk') as f:
text = f.read() # 直接得到 unicode 字串
with open('output.txt', 'w') as f:
f.write('Hello, world!')
# 指定編碼寫入
import codecs
with codecs.open('output.txt', 'w', 'utf-8') as f:
f.write(u'測試中文')
注意:作業系統會緩衝寫入資料,必須呼叫 close() 或離開 with 區塊才會真正寫入磁碟,否則資料可能遺失。
掌握 open() 模式、with 區塊、編碼轉換與分塊讀取,即能安全高效處理各類檔案 I/O 需求。