💡 この記事でわかること
- ファイル操作とは何か、どんなときに使うのか
- open() のモード(r・w・a)の違い
- with文を使って安全にファイルを開く方法
- read・readlines・for文での読み込みと、write での書き込み
- 文字コード(encoding)の指定と、FileNotFoundError への対処
1. ファイル操作とは?
ファイル操作とは、
👉 プログラムからテキストファイルなどを読み込んだり、書き込んだりすることです。
💡 プログラムの変数はプログラムが終わると消えてしまいますが、ファイルに書き出しておけば、あとから読み直したり、別のプログラムで使ったりできます。ログの記録、設定の保存、CSVデータの読み込みなど、実務でも頻繁に使う操作です。
基本的な流れは「開く → 読み書きする → 閉じる」の3ステップです。
2. ファイルを開く:open()とモード
ファイルはopen(ファイル名, モード)で開きます。モードによって「読み込み用」「書き込み用」などが決まります。
"r":読み込み(デフォルト)。ファイルがないとエラー"w":書き込み。ファイルがなければ新規作成、あれば中身を全部消してから書く"a":追記。ファイルの末尾に書き足す(既存の内容は残る)
👉 "w"は既存の内容を消してしまうので、大事なファイルを指定しないよう注意してください。
3. with文で安全に開く
開いたファイルは、使い終わったらclose()で閉じる必要があります。閉じ忘れを防ぐため、Pythonではwith文を使うのが基本です。
with open("sample.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
# withブロックを抜けると、ファイルは自動で閉じられる💡 with open(...) as f:と書くと、ブロックを抜けたときに(途中でエラーが起きても)自動的にファイルが閉じられます。withを使わない場合は、次のように自分でclose()する必要があります。
f = open("sample.txt", "r", encoding="utf-8")
content = f.read()
f.close() # 閉じ忘れやすいので with を推奨4. ファイルを読み込む
読み込み方には、用途に応じていくつかの方法があります。
read():全体を1つの文字列で読む
with open("sample.txt", "r", encoding="utf-8") as f:
text = f.read()
print(text)for文:1行ずつ処理する
with open("sample.txt", "r", encoding="utf-8") as f:
for line in f:
print(line.rstrip()) # rstrip() で行末の改行を取り除く👉 大きなファイルでも1行ずつ読むのでメモリに優しく、行単位の処理に向いています。for文の書き方は、こちらの記事も参考にしてください。
👉 Pythonのif文・for文・while文についての記事はこちら
readlines():各行をリストで読む
with open("sample.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print(lines) # ['1行目\n', '2行目\n', '3行目\n']
print(len(lines)) # 3👉 読み込んだ各行を扱うのに便利な、リストと辞書についての記事はこちら
5. ファイルに書き込む
書き込みは"w"モードで開き、write()を使います。
with open("output.txt", "w", encoding="utf-8") as f:
f.write("1行目\n")
f.write("2行目\n")
# output.txt の中身:
# 1行目
# 2行目👉 write()はprint()と違い、自動で改行してくれません。行を分けたいときは、自分で\n(改行)を書き加える必要があります。
リストの内容をまとめて書き出したいときは、for文と組み合わせます。
names = ["太郎", "花子", "次郎"]
with open("names.txt", "w", encoding="utf-8") as f:
for name in names:
f.write(name + "\n")6. 追記モード(a)
既存の内容を残したまま末尾に書き足したいときは"a"モードを使います。ログの記録などでよく使います。
with open("log.txt", "a", encoding="utf-8") as f:
f.write("アクセスがありました\n")
# 実行するたびに、log.txt の末尾に1行ずつ追加されていく7. 文字コード(encoding)の指定
👉 日本語を含むファイルを扱うときは、encoding="utf-8"を指定するのが基本です。
指定を省略すると、OSごとの既定の文字コードが使われます。特にWindowsではcp932(Shift_JIS系)が既定のため、UTF-8で保存されたファイルを読むと文字化けやUnicodeDecodeErrorが起きることがあります。トラブルを避けるため、読み書きどちらでもencodingを明示しておきましょう。
8. 存在しないファイルへの対処(FileNotFoundError)
"r"モードで存在しないファイルを開こうとするとFileNotFoundErrorが発生します。ファイルの有無が不確かな場合は、例外処理で対応します。
try:
with open("data.txt", "r", encoding="utf-8") as f:
print(f.read())
except FileNotFoundError:
print("ファイルが見つかりませんでした")👉 Pythonの例外処理(try・except)についての記事はこちら
9. モードとメソッド 早見表
| モード | 用途 | ファイルがない場合 | 既存の中身 |
|---|---|---|---|
| "r" | 読み込み | エラー | — |
| "w" | 書き込み | 新規作成 | すべて消える |
| "a" | 追記 | 新規作成 | 残る(末尾に追加) |
f.read():ファイル全体を1つの文字列で読むf.readlines():各行を要素にしたリストで読むfor line in f::1行ずつ順番に読むf.write(文字列):文字列を書き込む(改行は自分で付ける)
10. まとめ
- ファイル操作は「開く → 読み書き → 閉じる」。
with open(...) as f:で閉じ忘れを防ぐ - モードはr(読み)・w(書き・上書き)・a(追記)の3つが基本
- 読み込みは
read()・readlines()・for line in f - 書き込みは
write()。改行\nは自分で付ける - 日本語を扱うなら
encoding="utf-8"を必ず指定する
👉 まずはwith open("test.txt", "w", encoding="utf-8")で書き込み、次に"r"で読み込む、という往復を試してみましょう。ここまでできれば、簡単なメモアプリやログ記録ツールが作れるようになります。