2026-10-06 · 已实跑验证(递归统计/降序排序/空目录边界全过)
服务器磁盘报警、C 盘飘红,第一件事是搞清楚哪个文件夹吃的空间。Windows 资源管理器要一个个右键看属性,慢;用这个脚本一次扫完,还顺手出一份 CSV 报告。
import argparse, csv, os
def dir_size(path):
total = 0
for root, dirs, files in os.walk(path, onerror=lambda e: None):
for f in files:
fp = os.path.join(root, f)
try:
total += os.path.getsize(fp)
except OSError:
pass # 没权限/文件被删,跳过不中断
return total
def human(n):
for u in ("B", "KB", "MB", "GB", "TB"):
if n < 1024:
return f"{n:.1f} {u}"
n /= 1024
return f"{n:.1f} PB"
ap = argparse.ArgumentParser()
ap.add_argument("target", nargs="?", default=".")
ap.add_argument("--top", type=int, default=20)
ap.add_argument("--out", default="dir_size_report.csv")
args = ap.parse_args()
rows = []
for name in sorted(os.listdir(args.target)):
p = os.path.join(args.target, name)
if os.path.isdir(p):
rows.append((name, dir_size(p)))
rows.sort(key=lambda r: -r[1])
print(f"{'目录':<40} {'大小':>12}")
for name, size in rows[:args.top]:
print(f"{name:<40} {human(size):>12}")
with open(args.out, "w", newline="", encoding="utf-8-sig") as f:
w = csv.writer(f)
w.writerow(["目录", "字节数", "人类可读"])
w.writerows([(n, s, human(s)) for n, s in rows])
python3 dir_size_report.py /var # 扫 /var 下各子目录
python3 dir_size_report.py . --top 10 --out 磁盘报告.csv
我们提供代跑服务:把目录清单发给我们(或说明服务器情况),帮你出盘点报告+清理建议,9.9 元起。
👉 查看服务与价格