
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でファイル操作をするときの基本中の基本となる構文なので、必ず押さえておきたいポイントです。

