【Python】大量のcsvファイルをExcelの各シートに入れる方法

大量のCSVファイルの処理に困ったことはありませんか?私はあります。

3つくらいのCSVなら適当に手動コピペするのですが、10や20となるとめんどくさいんですよね。

やりたいこと

今回のプログラムでやりたいことはこれだけです。

  • フォルダ内にあるすべてのcsvファイルを、1つのエクセルの各シートに入れる

これをやりたい人がどのくらいいるのかはわかりませんが、少なくとも私はたまにやらざるを得ないので、誰かの役に立つといいなと思っています。

準備

プログラム実行前に以下の準備をしておいてください。

  • opepyxlを使っています。pip install openpyxlでインストールしましょう。

  • .pyファイルのあるディレクトリに/csv/を作り、その中にcsvファイルをすべて格納しておきます。

コード

import os
import glob
from pathlib import Path

import openpyxl   
import csv

# ファイル指定
file_path ="ファイルパス"
csvfiles = glob.glob(file_path+"/csv/*.csv", recursive=False)

wb = openpyxl.Workbook()

# csvを順次コピー
for file in csvfiles:
    wb.create_sheet(os.path.splitext(os.path.basename(file))[0])
    wb.active = wb.sheetnames.index(os.path.splitext(os.path.basename(file))[0])
    ws = wb.active

    with open(file, encoding="shift-jis") as f:
        reader = csv.reader(f, delimiter=',')
        for row in reader:
            row_float = [float(a) for a in reader(1,len(row))]

            ws.append(row_float)


# エクセルとして保存
wb.save(file_path+"/mergecsv.xlsx")

今後

とりあえず1つのエクセルに格納できたので、あとは煮るなり焼くなりします。 この後の処理や計算がいつも同じならそこまでコードに入れてもいいと思います。 私の場合は結構バラバラなのでここまで。 もう少し定型業務が多い職場に移ったら追加するかもしれません。