Pythonのファイル操作とは?open・withでの読み書きを解説

PR Python

Pythonのファイル操作とは?open・withでの読み書きを解説

💡 この記事でわかること

  • ファイル操作とは何か、どんなときに使うのか
  • 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"で読み込む、という往復を試してみましょう。ここまでできれば、簡単なメモアプリやログ記録ツールが作れるようになります。

-Python
-, , , ,