フォルダサイズ計算は「どこがどれだけ容量を食っているか」を見抜く技術
業務自動化をしていると、
「このフォルダ、どれくらい容量を使っているんだろう?」
「バックアップ前にフォルダサイズを知りたい」
「容量が大きいフォルダを特定して整理したい」
といったニーズが必ず出てきます。
Pythonでは、フォルダ内のファイルサイズを合計することで「フォルダサイズ」を計算できます。
ポイントは「ファイルだけを足し算する」「サブフォルダをどう扱うかを決める」の2つです。
フォルダ直下だけのサイズを計算する基本形
listdir と getsize を組み合わせる
まずは「サブフォルダは無視して、直下のファイルだけ」のサイズを合計する最小コードです。
import os
folder = "data"
total = 0
for name in os.listdir(folder):
path = os.path.join(folder, name)
if os.path.isfile(path):
total += os.path.getsize(path)
print("合計サイズ:", total, "bytes")
print("合計サイズ:", total / 1024 / 1024, "MB")
Pythonここで大事なのは、os.listdir() が「ファイルとフォルダの両方」を返すことです。
そのため、os.path.isfile() で「ファイルだけ」に絞り込んでから os.path.getsize() を呼んでいます。
「フォルダサイズ=中のファイルサイズの合計」という考え方が、まずは土台になります。
サブフォルダも含めてフォルダサイズを計算する
os.walk を使って階層全体をたどる
実務では、サブフォルダも含めて「フォルダ全体のサイズ」を知りたいことが多いです。
その場合は os.walk() を使います。
import os
folder = "data"
total = 0
for current, dirs, files in os.walk(folder):
for name in files:
path = os.path.join(current, name)
total += os.path.getsize(path)
print("合計サイズ:", total, "bytes")
print("合計サイズ:", total / 1024 / 1024, "MB")
Pythonos.walk() は、指定したフォルダ以下のすべての階層を自動でたどってくれます。
その中の files だけを対象にしてサイズを足し込むことで、「フォルダ全体のサイズ」が求まります。
人間にとって読みやすい単位に変換する
バイトから KB / MB / GB への変換
バイトのままだと直感的に分かりにくいので、業務では KB / MB / GB に変換して表示することが多いです。
def to_readable(size_bytes: int) -> str:
for unit in ["bytes", "KB", "MB", "GB", "TB"]:
if size_bytes < 1024 or unit == "TB":
return f"{size_bytes:.2f} {unit}"
size_bytes /= 1024
import os
folder = "data"
total = 0
for current, dirs, files in os.walk(folder):
for name in files:
path = os.path.join(current, name)
total += os.path.getsize(path)
print("合計サイズ:", to_readable(total))
Pythonこのような小さなユーティリティ関数を用意しておくと、ログやレポートが一気に読みやすくなります。
例題①:バックアップ前にフォルダサイズを確認するテンプレート
シナリオ
data フォルダを丸ごとバックアップしたい。
ただし、フォルダサイズが大きすぎる場合は事前に知っておきたい。
import os
def folder_size(path: str) -> int:
total = 0
for current, dirs, files in os.walk(path):
for name in files:
f = os.path.join(current, name)
total += os.path.getsize(f)
return total
def to_mb(size_bytes: int) -> float:
return size_bytes / 1024 / 1024
target = "data"
size = folder_size(target)
print("バックアップ対象フォルダ:", target)
print(f"サイズ: {to_mb(size):.2f} MB")
Pythonこのテンプレートをベースに、「サイズが◯MBを超えていたら警告する」「ログに記録する」といった処理を簡単に追加できます。
例題②:プロジェクト内で「重いフォルダ」をランキングする
シナリオ
project 配下のサブフォルダごとにサイズを計算し、「どのフォルダが一番容量を食っているか」を知りたい。
import os
def folder_size(path: str) -> int:
total = 0
for current, dirs, files in os.walk(path):
for name in files:
f = os.path.join(current, name)
total += os.path.getsize(f)
return total
root = "project"
results = []
for name in os.listdir(root):
path = os.path.join(root, name)
if os.path.isdir(path):
size = folder_size(path)
results.append((path, size))
results.sort(key=lambda x: x[1], reverse=True)
for path, size in results:
print(f"{path}: {size / 1024 / 1024:.2f} MB")
Pythonこれで、「どのフォルダから整理すべきか」が一目で分かるようになります。
サーバーの容量逼迫対策や、古いプロジェクトの整理にとても役立ちます。
pathlib を使った、少しモダンで読みやすい書き方
Path.rglob を使ってファイルを列挙する
from pathlib import Path
def folder_size(path: Path) -> int:
total = 0
for p in path.rglob("*"):
if p.is_file():
total += p.stat().st_size
return total
folder = Path("data")
size = folder_size(folder)
print("合計サイズ:", size, "bytes")
print("合計サイズ:", size / 1024 / 1024, "MB")
Pythonpathlib を使うと、パス操作がオブジェクト指向的になり、コードの読みやすさがかなり上がります。rglob("*") は「サブフォルダを含めてすべてのパスを列挙する」という意味です。
フォルダサイズ計算を業務で使うときの考え方
フォルダサイズ計算は、単なる「合計値」ではなく、業務上の判断材料になります。
バックアップ前に「どれくらいの容量をコピーするのか」を把握する。
サーバーの容量逼迫時に「どのフォルダから手を付けるか」を決める。
定期的にサイズをログに残して「増え方の傾向」を見る。
そのために大事なのは、次の3点です。
フォルダサイズ=中のファイルサイズの合計であると理解すること。
サブフォルダを含めるかどうかを明確に決めること。
人間が読める単位(MB / GB)に変換して扱うこと。
まずは、あなたの PC の中で「重そうだな」と感じているフォルダを一つ選んで、
今日の folder_size 関数をそのまま試してみてください。
数字で「重さ」が見えるようになると、次にやるべき整理や自動化のアイデアが自然と浮かんできます。

