なろう分析記録

『小説家になろう』をふくめ『ネット小説投稿サイト』を分析する。コード置き場,主にPython,javascript,たまに創作。

【Pythonサンプルコード】サブフォルダを含め、フォルダ内の総ファイルの総ファイルサイズを取得する方法

フォルダ内の総ファイル数と総ファイルサイズを把握する

レンタルサーバーなどではファイル数・ファイルサイズに上限が指定されているため、これらを把握することは重要です。

そしてそれらを把握するための機能は大抵のサーバーには付いていますが、リアルタイムで細かい情報を取得することは出来ないことが多いため、具体的にどこでどのファイルがどれぐらいの容量を圧迫しているのかを把握することはなかなか難しいです。

そこで今回はPythonを使って「サブフォルダを含め、フォルダ内の総ファイルの総ファイルサイズ」を取得し、エクセルファイルに書き出すサンプルコードをご紹介したいと思います。

f:id:karupoimou:20190803025012p:plain:w400
サンプルコード

サンプルコード

#サブフォルダを含め、総ファイル数・総サイズを取得する
import pathlib
import glob
import pandas as pd

def get_all_file(dir):    
    p = pathlib.Path(dir)
    file_list=list(p.glob("**/*"))
    file_size=0
    file_name_list=[]
    file_size_list=[]
    file_atime_list=[]
    file_mtime_list=[]

    for i in range(len(file_list)):
        #ファイルサイズの集計
        file_size=file_size+file_list[i].stat().st_size
        #ファイル名・ファイルサイズのリスト化
        file_name_list.append(file_list[i])
        file_size_list.append(file_list[i].stat().st_size)
        file_atime_list.append(file_list[i].stat().st_atime)
        file_mtime_list.append(file_list[i].stat().st_mtime)

    #ファイル総数とファイル総サイズの表示
    file_num=len(file_list)
    file_size_kb=file_size/1024
    file_size_mb=file_size/1024/1024
    
    print("files count:%s"%file_num)
    print("files size:%smb(%skb)"%(int(file_size_mb),int(file_size_kb)))
    
    #ファイル名とサイズをエクセルに書き出し
    all_list=[file_name_list, file_size_list, file_atime_list, file_mtime_list]
    df = pd.DataFrame(all_list,index=["ファイル名","ファイルサイズ","最終アクセス","最終更新"])
    df.T.to_excel("all_file.xlsx", sheet_name="Sheet1")
    print("export .xlsx")

#対象とするディレクトリを指定("./"は実行ファイルと同じディレクトリを指す
get_all_file("./")

結果

f:id:karupoimou:20190803023503p:plain
出力内容
f:id:karupoimou:20190803023357p:plain:w400
エクセル出力

解説

コードを実行するとファイル数とファイルサイズのサマリーが表示され、またファイル名・ファイルサイズが入ったエクセルファイルが生成されます。

エクセルの並べ替え機能を使うことでファイルを容量の大きい順・フォルダ名順などに並べ替えることができます。

参考ページ

docs.python.org
qiita.com