唯讀的 open() 情境管理器
你為下一個深度學習專案準備了一堆資料檔案,這些資料花了你好幾個月才蒐集並清理。若是在載入用來訓練時不小心覆寫了其中一個檔案,那就太慘了。因此你決定在專案裡建立一個 open() 的唯讀情境管理器版本。
一般的 open() 情境管理器會:
- 接受檔名與模式(
'r'代表讀取、'w'代表寫入、'a'代表附加) - 依模式開啟檔案以供讀取、寫入或附加
- 將控制權連同檔案參照一併交還給 with 內容區塊
- 等待內容區塊執行完畢
- 然後在離開前關閉檔案
你要實作的情境管理器也會做相同的事,只是它「只」接受檔名參數,且只會以讀取模式開啟檔案。
本練習屬於課程
Python 函式寫作
練習說明
- 從
open_read_only()將控制權傳回給 with 內容區塊,並確保read_only_file物件被指派給my_file。 - 使用
read_only_file的.close()方法,避免留下未關閉的檔案。
動手互動練習
試著完成這個範例程式碼,體驗一下這個練習。
@contextlib.contextmanager
def open_read_only(filename):
"""Open a file in read-only mode.
Args:
filename (str): The location of the file to read
Yields:
file object
"""
read_only_file = open(filename, mode='r')
# Yield read_only_file so it can be assigned to my_file
____ ____
# Close read_only_file
____.____()
with open_read_only('my_file.txt') as my_file:
print(my_file.read())