Hachi Note

Enjoy your Tokyo life.

Pythonで複数ファイルを読み込み、結合して1つのファイルに書き込む方法

pandasモジュールを使ってpythonでファイル読み込み、書き込みするコードを書いたのでメモ。勉強中ゆえあまり良いコードとは言えません、あしからず。

読み込むファイル

「【Aug.-2018】test.xlsx」といった名称のファイル群。ファイルは毎月1日に今月のものがフォルダに追加される。
今年の1月ー今月までのファイルをすべて読み込む(最大12個)。
中身はdate, estimate, actualの3列。

やりたいこと

読み込んだ複数ファイルを1月から順に縦にマージし、1つのCSVファイルに書き込む。スクリプトを実行する度にファイルは丸ごと上書きされる(アペンド処理ではない)。
※pandasを使用するのでインストール・インポートが必要。

import sys, urllib
sys.path.append('pandasモジュールのインストール先パス')#本来は不要だがうちのpythonがpandasをインポートしてくれないので記述
import pandas as pd
import datetime

#読み込み
TY = datetime.datetime.now().year
monthlist = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'Jul', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec']
alldata = []

for i in range(12):
    fileName = '【'+monthlist[i]+'.-'+str(TY)+'】test.xlsx'
    xlsFile = r"読み込むファイルのディレクトリのパス" + fileName
    sheetName = "シート名"

    try:
        df = pd.read_excel(xlsFile, sheet_name=sheetName, header=None)
        df = df.drop(0)
        df = df.dropna(how='all')#空行削除
        alldata.append(df)

    except FileNotFoundError:
        break

for i in range(len(df)):
    df=df.drop(i + 1)

for i in range(len(alldata)):
    df=df.append(alldata[i])

#列名が0,1,2になってしまうので書き換え
df=df.rename(columns={0: 'date', 1:'estimate', 2:'actual'})

#書き込み
df.to_csv('書き込み先のパス&ファイル名', index=False)

}

参考にした↓のサイトがとても簡潔かつトピックが豊富でよかった。
note.nkmk.me

某エンジニア向けサイトとかは見た目が広告だらけでごちゃごちゃしてるし、内容も冗長なので読む気が失せる・・・。やっぱり見た目・内容共にシンプルで必要十分なのが一番いい。