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")
实际输出片段:
.png: 412个, 1.2 GB.pdf: 187个, 340 MB.zip: 56个, 2.1 GB
第三步:找出重复文件(按大小+名称快速筛选)
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)}")
三个实用建议(踩坑后总结)
- 先备份再操作:删除或移动前,用
os.rename改名为.bak观察一周。 - 用
os.path.getsize而非os.stat:前者更简洁,适合快速统计。 - 大目录加进度提示:
os.walk处理 10 万文件时很慢,可每 1000 个打印一次进度。
行动号召
打开你的终端,把 target_dir 换成你的下载或桌面路径,运行上面三段代码。花 10 分钟,你就能看清自己数字生活的“库存”。整理完,你会感谢自己。
免责声明:本文代码仅为学习示例,操作文件前请务必备份重要数据。作者不对任何因误操作导致的数据丢失负责。