Python自动化学习日记:用os模块实现文件查找与统计的实战心得(2026-10-03)

为什么我突然想学文件自动化?

上周整理电脑时,我发现“下载”文件夹里塞了 1,247 个文件,其中 300 多个是重复的截图,还有大量命名混乱的文档。手动整理?至少两小时。于是我决定用 Python 的 os 模块写个小工具,顺便记录下这次实战心得。

核心实战:三步搞定文件查找与统计

第一步:遍历目录,收集文件信息

import os

target_dir = "/Users/me/Downloads"
file_list = []

for root, dirs, files in os.walk(target_dir):
    for f in files:
        path = os.path.join(root, f)
        size = os.path.getsize(path)  # 字节
        file_list.append((path, size))

第二步:按扩展名统计数量与总大小

我用一个字典轻松汇总:

from collections import defaultdict

stats = defaultdict(lambda: {"count": 0, "total_size": 0})
for path, size in file_list:
    ext = os.path.splitext(path)[1].lower() or "无扩展名"
    stats[ext]["count"] += 1
    stats[ext]["total_size"] += size

for ext, data in sorted(stats.items(), key=lambda x: -x[1]["count"]):
    print(f"{ext}: {data['count']}个, {data['total_size']/1024/1024:.2f} MB")

实际输出片段:

第三步:找出重复文件(按大小+名称快速筛选)

from collections import Counter
names = [os.path.basename(p) for p, _ in file_list]
duplicates = [name for name, cnt in Counter(names).items() if cnt > 1]
print(f"重复文件名数量: {len(duplicates)}")

三个实用建议(踩坑后总结)

  1. 先备份再操作:删除或移动前,用 os.rename 改名为 .bak 观察一周。
  2. 用 os.path.getsize 而非 os.stat:前者更简洁,适合快速统计。
  3. 大目录加进度提示:os.walk 处理 10 万文件时很慢,可每 1000 个打印一次进度。

行动号召

打开你的终端,把 target_dir 换成你的下载或桌面路径,运行上面三段代码。花 10 分钟,你就能看清自己数字生活的“库存”。整理完,你会感谢自己。

免责声明:本文代码仅为学习示例,操作文件前请务必备份重要数据。作者不对任何因误操作导致的数据丢失负责。