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