Pythonを使用してディレクトリのサイズを計算しますか?質問する

Pythonを使用してディレクトリのサイズを計算しますか?質問する

この特定の車輪を再発明する前に、Python を使用してディレクトリのサイズを計算するための優れたルーチンを持っている人はいませんか? ルーチンがサイズを Mb/Gb などで適切にフォーマットしてくれると非常に便利です。

ベストアンサー1

これはすべてのサブディレクトリを調べ、ファイルサイズを合計します。

import os

def get_size(start_path = '.'):
    total_size = 0
    for dirpath, dirnames, filenames in os.walk(start_path):
        for f in filenames:
            fp = os.path.join(dirpath, f)
            # skip if it is symbolic link
            if not os.path.islink(fp):
                total_size += os.path.getsize(fp)

    return total_size

print(get_size(), 'bytes')

そして、楽しく使うためのワンライナーos.listdir(サブディレクトリは含まれません):

import os
sum(os.path.getsize(f) for f in os.listdir('.') if os.path.isfile(f))

参照:

更新: os.path.getsizeを使用する方が、 os.stat().st_size メソッドを使用するよりも明確です。

これを指摘してくれた ghostdog74 に感謝します!

os.stat- st_sizeサイズをバイト単位で指定します。ファイル サイズやその他のファイル関連情報を取得するためにも使用できます。

import os

nbytes = sum(d.stat().st_size for d in os.scandir('.') if d.is_file())

2018年アップデート

Python 3.4以前を使用している場合は、walkサードパーティが提供するより効率的な方法の使用を検討してください。scandirパッケージ。Python 3.5 以降では、このパッケージは標準ライブラリに組み込まれ、それos.walkに応じてパフォーマンスが向上しました。

2019年アップデート

pathlib最近、使用頻度が高くなったのですが、pathlib解決策は次のとおりです。

from pathlib import Path

root_directory = Path('.')
sum(f.stat().st_size for f in root_directory.glob('**/*') if f.is_file())

おすすめ記事