Pythonでファイルを安全に閉じる方法!with open()を使うメリットを徹底解説
生徒
「Pythonでファイルを開いたあと、ちゃんと閉じるって聞いたんですけど、どうすればいいんですか?」
先生
「良い質問ですね。Pythonでは、with open()を使うことでファイルを安全に開いて自動的に閉じることができます。」
生徒
「えっ、自動で閉じてくれるんですか?便利そうですね!」
先生
「そうなんです。では、まず基本の使い方を見ていきましょう。」
1. Pythonのファイル処理とは?
Pythonでは、テキストファイルやデータファイルを読み書きする機能が標準で備わっています。たとえば、メモ帳で作った文章を読み込んだり、プログラムの結果をファイルに保存することができます。これを「ファイル処理」といいます。
ファイル処理には主に次の3つのステップがあります。
- ① ファイルを開く(
open()) - ② ファイルを読み書きする(
read()やwrite()) - ③ ファイルを閉じる(
close())
この3つの手順を正しく理解することが、ファイル処理を安全に行うための基本です。
2. ファイルを開いて閉じる基本方法
まずはwith open()を使わない方法から見てみましょう。これが昔ながらの書き方です。
file = open("example.txt", "w")
file.write("こんにちは、Pythonの世界!")
file.close()
この方法では、open()でファイルを開き、処理が終わったあとにclose()で閉じる必要があります。もしclose()を忘れてしまうと、ファイルがずっと開かれたままになり、データが正しく保存されなかったり、他のプログラムがファイルにアクセスできなくなるトラブルが起きることもあります。
3. with open()の使い方
Pythonでは、このような「閉じ忘れ」を防ぐために、with open()という構文が用意されています。これを使うと、処理が終わったあとに自動でファイルを閉じてくれるのです。
with open("example.txt", "w") as file:
file.write("こんにちは、Pythonのwith文です!")
このコードでは、withの中にopen()を書き、as fileで変数を指定しています。ブロック(インデントの部分)の中でファイル操作を行い、ブロックを抜けた瞬間にPythonが自動でclose()を呼び出してくれます。
つまり、「自動で閉じる安全なファイルの開き方」がwith open()なのです。
4. with open()のメリットとは?
with open()を使うメリットはたくさんあります。初心者がつまずきやすい「ファイルを閉じ忘れる」ミスを防げるのが最大の魅力です。それ以外にも次のような利点があります。
- ① 自動でファイルを閉じてくれる:プログラムが途中でエラーになっても、ファイルが自動で閉じられます。
- ② コードが読みやすくなる:ファイルの処理がどこで行われているかが一目で分かります。
- ③ メモリ管理が安全:不要なファイルハンドル(開かれたままのファイル)が残らないため、パソコンのメモリにも優しいです。
プログラムが大きくなってくると、こうした小さな工夫が大きな違いを生みます。
5. ファイルを読み取る場合の例
with open()は読み込みにも使えます。たとえば、保存したテキストを読み取って画面に表示したいときは次のように書きます。
with open("example.txt", "r") as file:
content = file.read()
print(content)
こんにちは、Pythonのwith文です!
このように、ファイルモードを「r(読み取り)」に指定することで、ファイルの中身をread()で取り出せます。もちろん、この場合も自動でファイルは閉じられます。
6. 書き込みと追記の違いも覚えよう
ファイルに書き込むときのモード指定も重要です。open()の第2引数でモードを選べます。
"w":書き込みモード。既存の内容を上書きする。"a":追記モード。既存の内容の末尾に追加する。"r":読み取りモード。読み込み専用。
たとえば、日記のように毎回新しい行を追加したいときは"a"モードを使います。
with open("log.txt", "a") as file:
file.write("今日もPythonを勉強しました。\n")
このようにしておけば、ファイルの内容が消えずに新しい情報を追加できます。
7. with open()を使わないと危険な例
もしwith open()を使わずにファイルを開いたままエラーが発生した場合、ファイルが閉じられないままになります。
file = open("sample.txt", "w")
file.write("テスト中です")
1 / 0 # エラーが発生!
file.close()
このコードでは、途中でエラーが起きたためclose()まで到達せず、ファイルが閉じられません。これが続くと、ファイルが壊れたりアクセスできなくなる危険があります。
しかし、with open()なら安心です。どんなエラーがあっても、ブロックを抜けるときに自動で閉じてくれるからです。
8. 初心者が覚えておくべきポイント
Pythonでファイルを扱うときは、必ずwith open()を使う習慣をつけましょう。これが「安全で正しいファイル処理」の第一歩です。
ファイル処理はプログラム開発の基礎であり、データ保存や設定ファイルの読み込みなど、あらゆる場面で使われます。with open()をマスターしておくと、信頼性の高いプログラムを書くことができます。