使い方のノート · 2026年10月3日
PythonでCSVを結合する最小のスクリプト
標準ライブラリだけで、UTF-8のCSVを見出し付きで結合します。
使い方
Python 3が使える環境で、下のコードをmerge_csv.pyとして保存します。同じ場所にinputフォルダを作り、見出しが同じUTF-8 CSVを2個以上入れてください。出力先のmerged.csvは上書きされるため、必要なら先に退避してください。
import csv
from pathlib import Path
files = sorted(Path("input").glob("*.csv"))
if len(files) < 2:
raise ValueError("inputに2個以上のCSVが必要です")
rows = []
header = None
for path in files:
with path.open(encoding="utf-8-sig", newline="") as f:
reader = csv.reader(f, strict=True)
current = next(reader, None)
if current is None:
raise ValueError(f"空のCSV: {path}")
if header is None:
header = current
if current != header:
raise ValueError(f"見出しが不一致: {path}")
for row in reader:
if len(row) != len(header):
raise ValueError(f"列数が不一致: {path}")
rows.append(row)
with Path("merged.csv").open("w", encoding="utf-8-sig", newline="") as f:
writer = csv.writer(f)
writer.writerow(header)
writer.writerows(rows)
print(f"データ{len(rows)}行を書き出しました")
python3 merge_csv.pyWindowsなど、Pythonのコマンド名がpythonの場合は読み替えてください。utf-8-sigは読み込み時にBOMがあれば除去し、書き込み時にはBOMを付けます。
改行で分割しない理由
CSVのセルには引用符で囲まれた改行が入る場合があります。単純な文字列の行分割やカンマ分割では、こうした値を壊します。csv.readerとcsv.writerに解析と出力を任せ、ファイルはnewline=""で開きます。Python公式のcsvドキュメント
この例の制限
データはメモリに保持します。巨大なファイル向けのストリーミング処理ではありません。列順の自動調整、文字コードの自動判定、重複削除、型の変換はしません。Shift_JIS入力の場合は読み込み側のencodingを変更し、すべてのファイルで同じ文字コードを使ってください。