結論から言うと、Pythonでファイルを開くときは with open(...) を基本にすると、閉じ忘れを防ぎながら安全に扱いやすくなります。
ファイル操作を始めると、open はよく使う関数です。
ただし、モードの違いや encoding の指定があいまいなままだと、読み書きの失敗や文字化けにつながることがあります。
この記事では、open の基本を、動くコードと一緒に整理します。
この記事でわかること
完成コード
完成コードは次の通りです。
from pathlib import Path
file_path = Path("sample_open.txt")
file_path.write_text("朝の作業を確認する\n昼の作業を進める\n", encoding="utf-8")
with open(file_path, mode="r", encoding="utf-8") as file:
content = file.read()
print("読み込み結果:")
print(content)
with open(file_path, mode="a", encoding="utf-8") as file:
file.write("夕方に結果を共有する\n")
with open(file_path, mode="r", encoding="utf-8") as file:
print("追記後の結果:")
print(file.read())コードのポイント
このコードでは、同じファイルを読み込みモードと追記モードで開いています。
mode="r"は既存ファイルの内容を読むときに使いますmode="a"は末尾へ追記したいときに使いますwithを使うと、処理が終わったあと自動でファイルが閉じられますencoding="utf-8"を指定すると、日本語を扱うときも意図が明確になります
open はシンプルな関数ですが、モードと文字コードを意識するだけでトラブルを減らしやすくなります。
コードを順番に説明します
主要な処理を分けて説明します。
1. open はファイルパスとモードをセットで考えます
with open(file_path, mode="r", encoding="utf-8") as file:
content = file.read()
print(content)open では、どのファイルをどう開くかを指定します。
この例では file_path を読み込み専用で開いています。
mode="r" は読むための基本モードです。
まずは「読むのか、書くのか、追記するのか」を明確にすると、open の使い方を整理しやすくなります。
2. with を使うと閉じ忘れを防ぎやすくなります
with open(file_path, mode="a", encoding="utf-8") as file:
file.write("夕方に結果を共有する\n")with を使うと、このブロックを抜けた時点でファイルが自動的に閉じられます。
そのため、自分で close() を呼び忘れる心配を減らせます。
ファイルはOSの資源を使うため、開いたままにしないことが大切です。
最初から with open(...) を基本形として覚えておくと、実務でも崩れにくくなります。
3. 日本語を扱うなら encoding を明示すると安心です
file_path.write_text("朝の作業を確認する\n昼の作業を進める\n", encoding="utf-8")
with open(file_path, mode="r", encoding="utf-8") as file:
print(file.read())日本語を含むファイルでは、実行環境によって文字コードの扱いがずれることがあります。
そこで encoding="utf-8" を明示すると、どの文字コードで読むかがわかりやすくなります。
特に実務では、別のPCやサーバーでも同じ動作を期待することが多いです。
文字化けの切り分けを減らすためにも、テキストファイルでは文字コードをはっきり書く癖が役立ちます。
実務で使うときのポイント
実務では、open を使うときに「何の目的で開くか」と「文字コードは何か」を先に決めると混乱しにくいです。
- 読むだけなら
r、末尾へ追加するならaと、目的ごとにモードを分けると事故を防ぎやすいです withを使っておくと、例外が起きた場合でもファイルを閉じやすくなります- 日本語を含むテキストは
encoding="utf-8"を明示すると、環境差分に強くなります - パス文字列をあちこちへ直書きするより、変数にまとめておくと保守しやすいです
ログファイルの追記、設定ファイルの読み込み、簡単なレポート出力など、open は小さな自動化で頻繁に登場します。
次の 3-2 で扱うテキスト読み込みや、後続のCSV・JSON処理の土台にもなる考え方です。