始める無料で始める

読み取り専用の open() コンテキストマネジャー

数か月かけて収集・クレンジングした次回の deep learning プロジェクト用のデータファイルがたくさんあります。学習用に読み込む際、誤って上書きしてしまったら大変です。そこで、プロジェクトで使うために open() の読み取り専用バージョンのコンテキストマネジャーを作成することにしました。

通常の open() コンテキストマネジャーは次のことを行います。

  • ファイル名とモード(読み取りは 'r'、書き込みは 'w'、追記は 'a')を受け取る
  • 読み取り/書き込み/追記のためにファイルを開く
  • ファイルへの参照とともに制御をコンテキストに返す
  • コンテキストの処理が終わるまで待機する
  • その後、終了前にファイルを閉じる

今回のコンテキストマネジャーも基本は同じですが、引数として受け取るのはファイル名のみで、ファイルは読み取り専用で開く点が異なります。

この演習はコースの一部です

Python関数の書き方

コースを見る

演習の手順

  • open_read_only() からコンテキストブロックへ制御を渡し、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())
コードを編集して実行