1. ホーム
  2. パイソン

[解決済み】Pythonを使ってディレクトリのサイズを計算する?

2022-04-02 04:02:43

質問

この特別な車輪を再発明する前に、誰かPythonを使用してディレクトリのサイズを計算するための素敵なルーチンを持っていますか?ルーチンは、Mb / Gbなどでうまくサイズをフォーマットしている場合は非常に素晴らしいことだ。

どのように解決するのですか?

サブディレクトリをすべて巡回し、ファイルサイズを集計します。

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_サイズ サイズをバイト単位で表示します。 また、ファイルサイズやその他のファイル関連情報を取得するためにも使用できます。

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())