Pythonでファイルを扱うときによく見かけるのが、with open(...) as f:
という構文です。
見慣れないと「何をしてるの?」と思うかもしれませんが、これは「ファイルを開いて安全に使うための基本構文」です。
この記事では、with open(...)
の意味、r
や f
の意味、そして「この構文が内部で何をしているのか?」を具体例とともにわかりやすく解説します。
with open(...) as f: は何をしている?
with
は「リソースの管理を自動でやってくれる構文」です。
ファイルのように「開いたら閉じる」「使ったら解放する」必要があるものを、安全かつ簡潔に扱うために使います。
with
を使うことで、ファイルの開閉(クローズ)を自動で行ってくれるという利点があります。
具体的には、次のような処理をしています:
- ファイルを開く(
open()
関数を使う) - ファイルオブジェクトを変数
f
に代入する with
ブロックの処理が終わると、自動的にf.close()
が呼ばれる
手動で f.close()
を書かなくても、Pythonが終了処理をやってくれるので、書き忘れによるバグを防げます。
with
を使わない場合との違い
もし with
を使わずにファイルを開くと、自分で .close()
を書く必要があります。
1 2 3 4 |
f = open("data.txt", "r", encoding="utf-8") data = f.read() f.close() |
この方法でも動きますが、f.close()
を忘れるとファイルが開きっぱなしになり、エラーやリソースリークの原因になります。
その点、with
を使えば自動で閉じてくれるので、安全性が高いのです。
open()
はどんなもの?
open()
は、Pythonに最初から備わっている組み込み関数です。
この関数を使うと、テキストファイルやCSVファイルなどを**読み書きするための入り口(ハンドル)**を作ることができます。
もう少し専門的に言うと、open()
はファイルの読み書きを行うための ファイルオブジェクト(例:TextIOWrapper
クラスのインスタンス)を返す関数です。
このファイルオブジェクトには、.read()
や .write()
といった便利なメソッドが含まれていて、読み取りや書き込みができるようになります。
さらに、open()
で返されるオブジェクトはコンテキストマネージャという性質を持っています。
そのため with
構文と一緒に使うことで、ファイルを開いたあとの「閉じ忘れ」などを自動で防いでくれるというメリットがあります。
"r"
は「読み取り専用」でファイルを開く合図
この "r"
は英語の read(読む) の頭文字で、「このファイルは読むだけです」とPythonに伝えるためのモード指定です。
読み込み専用なので、ファイルの中身を変更したり書き込んだりすることはできません。
また、このモードではファイルが存在していないとエラーになる点に注意が必要です。
f
は開いたファイルの「ニックネーム」
as f
の f
は、ファイルオブジェクトに付ける変数名です。
この f
は好きな名前でOKですが、よく使われるのが f
。これは単に file の頭文字で、慣習的に広く使われています。
具体例①:テキストファイルの中身を1行ずつ表示する
ファイルを読み取り専用で開き、中身を1行ずつ表示します。
1 2 3 4 5 |
filepath = "data.txt" with open(filepath, "r", encoding="utf-8") as f: for line in f: print(line.strip()) |
このコードでは:
"r"
:読み取り専用でファイルを開くencoding="utf-8"
:文字コードをUTF-8で解釈するline.strip()
:各行の改行文字や余計な空白を除去
結果として、ファイルの中身が整った形で1行ずつ出力されます。
具体例②:ファイルに文字列を書き込む
今度は、ファイルにテキストを書き込む場合です。モードを "w"
に変えます。
1 2 3 4 |
filepath = "output.txt" with open(filepath, "w", encoding="utf-8") as f: f.write("これは新しいファイルです。") |
このコードでは:
"w"
:書き込み専用モード(内容は上書きされる)- ファイルがなければ新しく作られ、あれば中身が消されて書き直される
具体例③:ファイルの末尾に追記する
ファイルの内容を残したまま追加したい場合は、モードを "a"
(append)にします。
1 2 3 4 |
filepath = "log.txt" with open(filepath, "a", encoding="utf-8") as f: f.write("ログに1行追加しました。\n") |
このように、既存ファイルの末尾にテキストを1行追加できます。
open関数でよく使う「モード」のまとめ
モード | 意味 | ファイルがない場合 |
---|---|---|
"r" |
読み込み(read) | エラーになる |
"w" |
書き込み(write) | 新しく作成される |
"a" |
追記(append) | 新しく作成される |
"r+" |
読み書き(read + write) | エラーになる |
まとめ
with open(...) as f:
はファイルを安全に開いて使うための構文open()
はPythonの組み込み関数で、ファイルオブジェクト(クラス)を返す"r"
は読み取り、"w"
は書き込み、"a"
は追記モードf
はファイルオブジェクトの変数名で、慣例的にf
が使われるwith
を使うことで.close()
の書き忘れを防げる
Pythonでファイル操作をするときの基本中の基本となる構文なので、必ず押さえておきたいポイントです。