この特定の車輪を再発明する前に、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.ウォーク
- os.path.islink
更新: 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())