この記事では、特定のフォルダ内にあるすべてのCSVファイルから、先頭のヘッダー行を自動的に削除し、その結果を新しいファイルとして別のフォルダに保存するPythonスクリプトの作成方法を解説します。
1. プロジェクトの概要と準備
このスクリプトの目的は、データ分析の前処理などで必要になる、多数のCSVファイルからのヘッダー行の一括削除を自動化することです。
処理のフローは以下の通りです。
header_removed
という名前の出力用フォルダを作成する。- スクリプトと同じ階層にあるすべてのCSVファイルを検索する。
- 各CSVファイルを一つずつ読み込む。
- 最初の行(ヘッダー)をスキップし、2行目以降のデータのみを読み取る。
- ヘッダーが削除されたデータを、
header_removed
フォルダ内に同名の新しいCSVファイルとして書き出す。
このスクリプトは、標準ライブラリのcsv
とpathlib
を使用します。
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のファイル操作における基本的ながらも重要なテクニックを組み合わせています。単純なループ処理で、手作業では時間のかかるファイルの前処理タスクを簡単に自動化できることがわかります。