PythonでCSVファイルを指定行数ごとに分割するシンプルな方法(ヘッダー付き対応)

大量のデータを扱うCSVファイルを扱っていると、「一定の行数ごとに分割したい」「でもヘッダー行(ラベル行)は毎回入れたい」といったニーズがありますよね。

今回は、Pythonを使って「CSVファイルを指定行数ごとに分割し、各ファイルにヘッダー行も付けるスクリプト」をご紹介します。


このスクリプトでできること

  • 任意のCSVファイルを、100行・500行など好きな行数単位で分割
  • 各ファイルの1行目にヘッダー(ラベル)を追加
  • Python標準の csv モジュールを使用(追加ライブラリ不要)

サンプルスクリプト

以下のコードを split_csv_with_header.py という名前で保存し、Pythonで実行することで動作します。

import csv
import os

def split_csv(input_file, output_prefix, rows_per_file):
    with open(input_file, 'r', newline='', encoding='utf-8') as csvfile:
        reader = csv.reader(csvfile)
        header = next(reader)  # ラベル行(1行目)を取得

        file_count = 1
        rows = []

        for i, row in enumerate(reader, start=1):
            rows.append(row)
            if i % rows_per_file == 0:
                output_filename = f"{output_prefix}_{file_count}.csv"
                with open(output_filename, 'w', newline='', encoding='utf-8') as outfile:
                    writer = csv.writer(outfile)
                    writer.writerow(header)
                    writer.writerows(rows)
                print(f"{output_filename} を作成しました({len(rows)} 行)")
                file_count += 1
                rows = []

        # 残りの行をファイルに書き出す(端数処理)
        if rows:
            output_filename = f"{output_prefix}_{file_count}.csv"
            with open(output_filename, 'w', newline='', encoding='utf-8') as outfile:
                writer = csv.writer(outfile)
                writer.writerow(header)
                writer.writerows(rows)
            print(f"{output_filename} を作成しました({len(rows)} 行)")

# 実行例
if __name__ == "__main__":
    split_csv('input.csv', 'output_part', 100)

解説ポイント

1. csv.reader を使ってCSVを読み込む

Python標準ライブラリの csv モジュールを使うことで、CSVファイルを行単位で簡単に処理できます。

2. header = next(reader)

最初の1行を「ヘッダー行」として取り出し、分割後のすべてのファイルの先頭に書き込みます。

3. 行数でファイルを切り替え

100行など指定された行数ごとにファイルを分けて保存していきます。大量のCSVデータも分割して扱いやすくできます。


実行結果の例

例えば、input.csv が300行(ヘッダー1行+299行)の内容だった場合:

python split_csv_with_header.py

と実行すると、以下のように出力されます:

  • output_part_1.csv(ヘッダー+1〜100行目)
  • output_part_2.csv(ヘッダー+101〜200行目)
  • output_part_3.csv(ヘッダー+201〜299行目)

利用シーンの例

  • 大量CSVをツールやアプリに分割して取り込むとき
  • メールやフォームなどでアップロード制限があるとき
  • 複数人に分担してデータをチェック・編集してもらいたいとき

まとめ

CSVファイルを手作業で分割するのは大変ですが、Pythonを使えばとてもシンプルに処理できます。
今回紹介したスクリプトを使えば、行数を決めて自動的に分割しつつ、ヘッダーも維持できるのでとても便利です。
CSVを扱う機会が多い方は、ぜひ一度使ってみてください。

コメント

タイトルとURLをコピーしました