大量のデータを扱う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を扱う機会が多い方は、ぜひ一度使ってみてください。

 
  
  
  
  
コメント