Pythonで複数のCSVファイルからヘッダー行を削除するスクリプト

この記事では、特定のフォルダ内にあるすべてのCSVファイルから、先頭のヘッダー行を自動的に削除し、その結果を新しいファイルとして別のフォルダに保存するPythonスクリプトの作成方法を解説します。


目次

1. プロジェクトの概要と準備

このスクリプトの目的は、データ分析の前処理などで必要になる、多数のCSVファイルからのヘッダー行の一括削除を自動化することです。

処理のフローは以下の通りです。

  1. header_removedという名前の出力用フォルダを作成する。
  2. スクリプトと同じ階層にあるすべてのCSVファイルを検索する。
  3. 各CSVファイルを一つずつ読み込む。
  4. 最初の行(ヘッダー)をスキップし、2行目以降のデータのみを読み取る。
  5. ヘッダーが削除されたデータを、header_removedフォルダ内に同名の新しいCSVファイルとして書き出す。

このスクリプトは、標準ライブラリのcsvpathlibを使用します。


2. 完成したコード全体

上記の設計に基づいた完全なスクリプトを以下に示します。このコードをremove_csv_header.pyなどの名前で保存し、処理したいCSVファイルと同じフォルダに置いて実行してください。

import csv
from pathlib import Path

# 1. 出力用フォルダを作成(既に存在してもエラーにならない)
output_dir = Path('header_removed')
output_dir.mkdir(exist_ok=True)

# 2. カレントディレクトリ内のすべてのCSVファイルをループ
# Path('.').glob('*.csv')で現在のフォルダのCSVをすべて取得
for csv_filepath in Path('.').glob('*.csv'):
    # スクリプト自体は処理しない
    if csv_filepath.name == 'remove_csv_header.py':
        continue
    
    print(f'見出し削除中: {csv_filepath.name}...')
    
    # データを保存するための一時リスト
    data_rows = []
    
    # 3. CSVファイルを読み込み、ヘッダー行をスキップする
    with open(csv_filepath, 'r', encoding='utf-8') as source_file:
        reader = csv.reader(source_file)
        for row in reader:
            # 1行目(ヘッダー)はスキップ
            if reader.line_num == 1:
                continue
            data_rows.append(row)
    
    # 4. ヘッダーが削除されたデータを新しいファイルに書き出す
    output_filepath = output_dir / csv_filepath.name
    with open(output_filepath, 'w', newline='', encoding='utf-8') as result_file:
        writer = csv.writer(result_file)
        for row in data_rows:
            writer.writerow(row)

print("すべての処理が完了しました。")

3. コードの解説

Path('.').glob('*.csv') pathlibモジュールのglobメソッドを使い、カレントディレクトリ(.)から拡張子が.csvのすべてのファイルを効率的に検索しています。

with open(...) as source_file: with文を使ってファイルを読み込むことで、処理が終わった後に自動でファイルが閉じられるため、安全で確実です。

if reader.line_num == 1: continue csv.readerオブジェクトのline_num属性は、現在処理している行の番号を返します。これが1である、つまりファイルの最初の行である場合にcontinue文を実行することで、その行の処理(data_rows.append(row))をスキップしています。

output_dir / csv_filepath.name pathlibでは/演算子を使ってパスを直感的に結合できます。ここでは、出力先フォルダのパスと元のファイル名を結合して、新しい保存先パスを生成しています。

open(..., 'w', newline='') CSVファイルを書き込みモードで開く際には、newline=''を指定することが強く推奨されます。これにより、OSによる改行文字の差異が原因で、不要な空行が書き込まれるのを防ぎます。

まとめ

このスクリプトは、pathlibによるファイル検索、csvモジュールによるデータの読み書き、そしてwith文による安全なファイルハンドリングといった、Pythonのファイル操作における基本的ながらも重要なテクニックを組み合わせています。単純なループ処理で、手作業では時間のかかるファイルの前処理タスクを簡単に自動化できることがわかります。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

私が勉強したこと、実践したこと、してることを書いているブログです。
主に資産運用について書いていたのですが、
最近はプログラミングに興味があるので、今はそればっかりです。

目次