我的知识记录

Python 查找大文件:定位磁盘空间杀手

用 Python 递归扫描目录,按文件大小排序列出最大的文件,快速定位占空间的视频、备份、安装包,附大小阈值过滤和 Top N 输出。

场景痛点

磁盘红了,不知道空间被谁吃了。Windows 自带的存储感知要等半天,想快速找出哪个文件夹、哪个文件最大,手动右键看属性太慢。用 Python 递归扫一遍目录,按大小排序,把 Top 20 大文件连同路径和大小打印出来,30 秒定位到那个 5GB 的旧视频备份。

用到的库

纯标准库,无需 pip 安装:

# os 为标准库

完整代码

import os

# ========== 配置区 ==========
SCAN_DIR = "D:/"              # 要扫描的根目录(Windows 用正斜杠也能识别)
TOP_N = 20                     # 显示前 N 大文件
MIN_SIZE_MB = 100              # 只看大于这个大小的文件
# ============================


def human_size(n: float) -> str:
"""把字节转成易读字符串。"""
for unit in ["B", "KB", "MB", "GB", "TB"]:
if n < 1024:
return f"{n:.2f} {unit}"
n /= 1024
return f"{n:.2f} PB"


def main():
if not os.path.isdir(SCAN_DIR):
print(f"目录不存在:{SCAN_DIR}")
return

threshold = MIN_SIZE_MB * 1024 * 1024
big_files = []

for dirpath, _, filenames in os.walk(SCAN_DIR):
for name in filenames:
p = os.path.join(dirpath, name)
try:
size = os.path.getsize(p)
except (PermissionError, OSError):
continue
if size >= threshold:
big_files.append((size, p))

# 按大小降序
big_files.sort(reverse=True)

print(f"扫描完成,共 {len(big_files)} 个大于 {MIN_SIZE_MB}MB 的文件,Top {TOP_N}:\n")
print(f"{'大小':>12}  路径")
print("-" * 80)
total = 0
for size, p in big_files[:TOP_N]:
print(f"{human_size(size):>12}  {p}")
total += size

print("-" * 80)
print(f"这 {min(TOP_N, len(big_files))} 个文件合计 {human_size(total)}")


if __name__ == "__main__":
main()

代码讲解

  • os.walk 递归:扫遍 SCAN_DIR 下所有子目录的文件,拿到每个文件的完整路径和大小。
  • MIN_SIZE_MB 阈值:只记录大于 100MB 的文件,小文件直接忽略,列表干净。想看全部就把阈值调小。
  • human_size:把字节数自动换算成 B/KB/MB/GB,打印出来直接看得懂,不用自己除 1024。
  • sort(reverse=True):按大小降序排,最大的排最前,切片 [:TOP_N] 只取前 N 个。
  • 异常跳过:没权限访问的系统文件、正在被占用的文件,try/except 跳过,不让一个错误中断整个扫描。

运行结果

终端打印一张表,每行是一个大文件的大小和完整路径,底部合计这 Top N 个文件占了多少空间。从表里一眼就能看到该删哪个、该移到移动硬盘的是哪个。

注意事项

  • 扫整盘耗时:扫 C 盘、整个 D 盘可能要几分钟,文件越多越慢,第一次扫可以先扫一个文件夹试水。
  • 权限:扫系统盘会遇到 System Volume Information 这类没权限目录,脚本已经跳过,不影响。
  • 别直接删:本脚本只列清单不删文件。看清楚是什么再决定——可能是虚拟内存、系统还原点,别手贱删错。
  • 硬链接:硬链接文件在多个路径显示同一大小,删之前搞清是不是硬链接,别以为是重复就删。
  • 要看目录占比:本脚本是按文件列。想看"哪个文件夹最占地方",可以在遍历时按目录累加大小再排序。

Python 查找大文件:定位磁盘空间杀手

标签:

更新时间:2026-09-14 21:17:56

上一篇:Python批量查找最近修改文件教程

下一篇:Python 查找重复文件并删除:按 MD5 去重实战