ファイルの読み書きは、プログラミングにおいて非常に重要な操作です。Pythonではopen()関数とwith文を使って、テキストファイルやCSVファイルを簡単に扱えます。
この記事では、ファイルの読み込み・書き込みの基本から、with文の使い方、CSVファイルの操作まで詳しく解説します。
基本的な使い方
with open()構文でファイルを開きます。with文を使うと、処理後にファイルが自動的に閉じられます。
Python
# ファイルの書き込み
with open("sample.txt", "w", encoding="utf-8") as f:
f.write("Hello, Python!\n")
f.write("ファイル操作の練習です。\n")
f.write("3行目のテキストです。\n")
print("書き込み完了")
# ファイルの読み込み(全体)
with open("sample.txt", "r", encoding="utf-8") as f:
content = f.read()
print(content)
実行結果
書き込み完了
Hello, Python!
ファイル操作の練習です。
3行目のテキストです。
必ずwith文を使う
f = open("file.txt") のように直接開くと、f.close()を呼び忘れてリソースリークが発生する可能性があります。with文を使えば自動的にファイルが閉じられるため、常にwith文を使いましょう。
読み込みの方法
Python
# 1行ずつ読み込み(メモリ効率が良い)
with open("sample.txt", "r", encoding="utf-8") as f:
for line in f:
print(f"行: {line.strip()}")
print("---")
# 全行をリストとして読み込み
with open("sample.txt", "r", encoding="utf-8") as f:
lines = f.readlines()
print(f"行数: {len(lines)}")
print(f"2行目: {lines[1].strip()}")
print("---")
# readline()で1行ずつ
with open("sample.txt", "r", encoding="utf-8") as f:
first_line = f.readline().strip()
second_line = f.readline().strip()
print(f"1行目: {first_line}")
print(f"2行目: {second_line}")
実行結果
行: Hello, Python!
行: ファイル操作の練習です。
行: 3行目のテキストです。
---
行数: 3
2行目: ファイル操作の練習です。
---
1行目: Hello, Python!
2行目: ファイル操作の練習です。
書き込みモード
ファイルを開く際のモードによって動作が変わります。
Python
# "w": 上書き(既存の内容は消える)
with open("output.txt", "w", encoding="utf-8") as f:
f.write("新しい内容\n")
# "a": 追記(既存の内容の末尾に追加)
with open("output.txt", "a", encoding="utf-8") as f:
f.write("追加された行\n")
f.write("さらに追加\n")
# 確認
with open("output.txt", "r", encoding="utf-8") as f:
print(f.read())
# writelines(): リストを一括書き込み
lines = ["1行目\n", "2行目\n", "3行目\n"]
with open("output2.txt", "w", encoding="utf-8") as f:
f.writelines(lines)
実行結果
新しい内容
追加された行
さらに追加
ファイルモード一覧
"r": 読み込み(デフォルト)、"w": 上書き書き込み、"a": 追記、"x": 新規作成(存在するとエラー)、"b": バイナリモード(例: "rb")。
ファイルの存在チェック
Python
from pathlib import Path
# ファイルの存在チェック
file_path = Path("sample.txt")
print(f"存在する: {file_path.exists()}")
print(f"ファイルである: {file_path.is_file()}")
# ディレクトリの確認
dir_path = Path(".")
print(f"ディレクトリ内のファイル:")
for item in dir_path.glob("*.txt"):
print(f" {item.name} ({item.stat().st_size}バイト)")
実行結果
存在する: True
ファイルである: True
ディレクトリ内のファイル:
sample.txt (82バイト)
output.txt (54バイト)
output2.txt (27バイト)
実践的な使い方
Python
import csv
# CSVファイルの書き込み
data = [
["名前", "年齢", "都市"],
["太郎", "25", "東京"],
["花子", "30", "大阪"],
["次郎", "22", "名古屋"],
]
with open("users.csv", "w", encoding="utf-8", newline="") as f:
writer = csv.writer(f)
writer.writerows(data)
# CSVファイルの読み込み
with open("users.csv", "r", encoding="utf-8") as f:
reader = csv.DictReader(f)
for row in reader:
print(f"{row['名前']}さん ({row['年齢']}歳) - {row['都市']}")
実行結果
太郎さん (25歳) - 東京
花子さん (30歳) - 大阪
次郎さん (22歳) - 名古屋
エンコーディングの指定
日本語を含むファイルを扱う場合は、必ず encoding="utf-8" を指定しましょう。指定しないと、環境によって文字化けが発生することがあります。
まとめ
with open()でファイルを安全に開閉できる"r"で読み込み、"w"で上書き、"a"で追記- 大きなファイルは
for line in f:で1行ずつ読むのが効率的 pathlib.Pathでファイルの存在チェックや操作ができる- 日本語ファイルは
encoding="utf-8"を必ず指定する