ファイル名が部分一致しているcsvファイルを結合する


知人が実験データを結合させる際に苦労していたため、ネットに落ちている情報を頼りに作成した。

csvファイルのファイル名

以下のようにtestディレクトリに数字3桁_数字2桁.csvというファイル名で格納されていることを条件に作成した。

./test
123_01.csv
123_02.csv
123_03.csv
124_01.csv
124_02.csv
125_01.csv

ソースコード

Marge_csv.py
import pandas as pd
import glob
import copy

# パスで指定したファイルの一覧を名前順にリスト形式で取得
csv_files = sorted(glob.glob('test/*.csv'))

for i in csv_files:#対象のファイルを一覧で表示
    print(i)

csv_files_copy = copy.deepcopy(csv_files)#csv_files_copyにcsv_filesをコピー

while len(csv_files_copy):#csv_files_copyが空になるまでループ
    data_list = []#csvファイルの中身を追加していくリストを用意
    data_list.append(pd.read_csv(csv_files_copy[0]))
    parent_file = []
    parent_file = csv_files_copy.pop(0)#csv_files_copyの先頭を削除しつつ親ファイルリストに格納 

    for file in csv_files_copy:
        child_file = []
        child_file = file#親ファイルと比較するファイルの名前を子ファイルリストに格納
        if parent_file[-6:] == child_file[-6:]:#二つのファイルの"下二桁.csv"が同じ
            data_list.append(pd.read_csv(file))#data_listに追加
            csv_files_copy.remove(file)#csv_files_copyから削除

    #リストを全て行方向に結合
    #axis=0:行方向に結合, sort
    df = pd.concat(data_list, axis=0, sort=True)
    output = "test/total" + parent_file[-6:]
    df.to_csv(output,index=False)#fファイル名"taotal下二桁.csv"で出力する

終わりに

空いている時間で雑に書いたため問題を指摘されたときにその都度修正します。