概要
Python を用いてファイルを扱う際、組み込み関数 open() などを用いることが多いと思います。
例えば、以下のようなコードです。
filename = "path/to/file.txt"
with open(filename, 'r') as f:
output_text = f.read()
print(output_text) # file.txt の内容が出力される
この時に、 open() を使ってファイルを開くのですが、 ‘r’ というおまじないのような引数がついています。
この ‘r’ を付ける意味について解説していきます。
open() で ‘r’ を付ける意味とつけなかった場合
まず、open() に関する公式ドキュメントを確認します。
今回着目しているのは、2つ目の引数なので、この公式ドキュメントで mode について言及しているところを参照します。
mode はオプションの文字列で、ファイルが開かれるモードを指定します。デフォルトは
'r'
で、読み込み用にテキストモードで開くという意味です。その他のよく使われる値は、書き込み (ファイルがすでに存在する場合はそのファイルを切り詰めます) 用の'w'
、排他的な生成用の'x'
、追記用の'a'
です
これを読むと ‘r’ を付けると読み込み用にテキストを開く、とあります。
読み込み用とはどういうことなのか、というと以下のコードを実行すると分かります。
filename = "./file.txt"
with open(filename) as f:
output_text = f.read()
print(output_text)
f.write("new string")
# UnsupportedOperation: not writable というエラーが出る
上記のコードを実行すると、UnsupportedOperation: not writable というエラーが発生します。
これは読み込み用でファイルが開かれたため書き込みの操作(.write())はできない、というエラーです。
このように、読み込み専用でファイルを開くと、書き込み関連の操作が一切できなくなります。
小規模なプログラムであれば、常に読み書きができるようにファイルを開いてしまっても問題無いと思います。
一方でプログラムが大規模になるほど、開発者が全体を把握できなくなり、ファイルへ意図せぬ読み書きが発生してしまう可能性が高まります。
そういったリスクを回避するために、目的に応じて ‘r’ や ‘w’ などのオプションを明示的につけるようにしましょう。
コメント