開始使用免費開始

唯讀的 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())
編輯並執行程式碼