Pythonで複数のローカルデータファイルを結合して分析に使う(osを使う)

データ加工の処理をするときに、バラバラになったローカルファイルを扱う必要が出てくることがあります。

そんなときはosモジュールを使うと便利です。

ひとまず、あるディレクトリの中身をすべて出したい

os.list_dirを使います。
ファイルオブジェクトやフルパスが帰ってくるわけではないので注意です。

import os

os.list_dir('.')
#現在のディレクトリ直下にあるディレクトリ/ファイル名が帰ってくる

よくあるのが日付ごとにファイルが分かれているものを一つのDataFrameにしたい場合など
このくらいだと、スクリプトにしておくのもめんどくさく、必要な時にさっとかけるのが楽でいいかな。

import pandas as pd
import os

dfs = []
for file_name in os.list_dir('.'):
    #ファイル名がcsvなら読み込む
    if file_name.endswith('.csv'):
        dfs.append(pd.read_csv(file_name)

df = pd.concat(dfs)

あるディレクトリ配下のさらに下まで探していく

os.walkを使います。
帰ってくる情報が多いので、ちょっと慣れが必要です。

例えば、ログが日付ごとのディレクトリに、時間ごとに分かれて格納されているときなどに便利です。

import os
import pandas

#順にディレクトリを掘りつつ、そのディレクトリ、その下のディレクトリ、ファイル群を返してくれる
#直下が日付ディレクトリ、その下がファイルだとわかっている場合
dfs = []
for root,dirs,files in os.walk('.'):
    if files:
        dfs_by_date = []
        for f in files:
            dfs_by_date.append(pd.read_csv('./'+ root+'/' + f))
        dfs.append(pd.concat(dfs_by_date)

df = pd.concat(dfs)

その他知っておくと便利なもの