Pythonでディレクトリツリーを作成しファイル概要と共にCSV出力する方法

概要

ディレクトリの中に大量のファイルや深い階層のデータがある場合、その構成がどうなっているかを探るのは大変ですよね。そこでPythonの関数を使ってツリー構成を取得し、さらに各ファイルのサイズや作成日時等の概要を読み取ってCSVに保存するスクリプトを作成いたしました。Windows7とUbuntu16.04にて動作を確認しています。
本ツールを使って得られるアウトプットのイメージは以下になります。
fileinfo_sample.csv (39 ダウンロード)
また、元スクリプトのソースコードはGithubにて公開しております。
https://github.com/Rosyuku/RosyukuScript.git

関数のスクリプト

def directoryTreeview(path):
    """
    <概要>
    pathに指定されたフォルダ以下の構造とファイルの概要を可視化するファンクション
     
    <引数>
    path:ディレクトリツリーのルートフォルダ
     
    <出力>
    df:データフレーム
    """

    import os
    import glob
    import pandas as pd
    
    def stat2(path):
       try:
           return list(os.stat(path))
       except:
           return [pd.np.NaN]*10    
       
    #ディレクトリをリーフまで再帰的に探索
    files = glob.glob(path + "/**", recursive=True)

    #ディレクトリ構造に関するデータフレーム
    pathData = pd.DataFrame(files)[0].str.split("/", expand=True).loc[:, len(path.split("/"))-1:]
   
    #データの概要に関するデータフレーム
    fileData = pd.DataFrame(files).applymap(stat2)[0].apply(pd.Series)
    fileData.columns = ['保護ビット',
                        'iノード番号',
                        'デバイス',
                        'ハードリンク数',
                        '所有者のユーザID',
                        '所有者のグループID',
                        'ファイルサイズ(バイト)',
                        '最終アクセス日時',
                        '最終更新日時',
                        '作成時刻',
                        ]
   
    fileData[['最終アクセス日時', '最終更新日時', '作成時刻']] = fileData[['最終アクセス日時', '最終更新日時', '作成時刻']].applymap(pd.datetime.fromtimestamp)

    #concatして出力する   
    df = pd.concat([pathData, fileData], axis=1)
    
    return df

使用例のスクリプト

if __name__ == "__main__":
   
   #RosyukuScriptの構成を対象に実行
   path = "***/site-packages/RosyukuScript"

   df = rs.directoryTreeview(path)
   
   df.to_csv("fileinfo.csv")

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA