Python 批量整理下载文件夹:用 pathlib 按扩展名自动归类
【摘要】 下载文件夹越用越乱,本文用 Python 标准库 pathlib 写一个十几行的小工具,按扩展名自动把文件归类到子文件夹,并给出实测验证结果与注意事项。
Python 批量整理下载文件夹:用 pathlib 按扩展名自动归类
背景
下载文件夹用久了总会变成“杂物间”:文档、图片、表格、安装包混在一起,找文件全靠搜索。手动一个个拖到子文件夹既耗时又容易漏,写个十几行的小脚本就能一劳永逸。本文用 Python 标准库 pathlib 实现一个按扩展名自动归类的小工具,不依赖任何第三方库。
实现思路
核心逻辑只有三步:
- 遍历目标文件夹下的所有文件;
- 按文件后缀查一张“扩展名 → 文件夹名”的映射表;
- 把文件移动到对应的子文件夹,子文件夹不存在就自动创建。
映射表用字典表示,方便随时增减规则;没有命中任何规则的文件统一放进“其他”,避免误删或漏处理。注意只处理文件本身,跳过已有的子文件夹,防止把刚建好的分类目录又搬一遍。
from pathlib import Path
RULES = {".jpg": "图片", ".png": "图片", ".docx": "文档",
".xlsx": "表格", ".txt": "文本"}
def organize(folder: Path) -> dict:
moved = {}
for item in folder.iterdir():
if not item.is_file():
continue
target_dir = folder / RULES.get(item.suffix.lower(), "其他")
target_dir.mkdir(exist_ok=True)
item.rename(target_dir / item.name)
moved[item.name] = target_dir.name
return moved
if __name__ == "__main__":
result = organize(Path("你的下载文件夹路径"))
for name in sorted(result):
print(f"{name} -> {result[name]}/")
几个细节值得注意:item.suffix.lower() 先把后缀转小写,这样 .JPG 和 .jpg 会进同一个文件夹;mkdir(exist_ok=True) 让重复运行也不会报错;Path.rename 在同一磁盘内就是移动操作,不产生多余拷贝。
验证结果
在 Python 3.12 下用临时文件夹实测:准备了 8 个样本文件(2 个 .docx、2 个 .jpg、1 个 .png、1 个 .xlsx、1 个 .txt,以及 1 个无扩展名的 README),运行后输出如下:
README -> 其他/
会议记录.docx -> 文档/
截图.png -> 图片/
报告.docx -> 文档/
照片.jpg -> 图片/
说明.txt -> 文本/
预算.xlsx -> 表格/
风景.jpg -> 图片/
整理后的目录结构:
其他/README
图片/截图.png、图片/照片.jpg、图片/风景.jpg
文本/说明.txt
文档/会议记录.docx、文档/报告.docx
表格/预算.xlsx
断言检查全部通过:8 个文件无一遗漏,无扩展名的 README 正确进入了“其他”。
注意事项
- 先备份再运行:第一次对真实文件夹使用前,先复制一份备份,或者先把
item.rename改成打印目标路径,确认无误后再真正移动。 - 同名文件会覆盖:如果目标文件夹里已存在同名文件,
rename在不同系统上的行为不一致,建议先判断目标是否存在,存在时改名(如加_1后缀)再移动。 - 不要对系统目录运行:只在自己的下载文件夹、桌面等数据目录使用,不要对系统目录或正在同步的网盘目录直接操作。
- 扩展名不等于文件类型:后缀可以被随意改名,严格校验文件类型需要读文件头;日常整理用后缀判断已经足够,关键文件仍建议人工复核。
掌握 pathlib 之后,这类“遍历 + 判断 + 移动”的批量处理都可以套用同一个模式:改一张映射表,就能换成按日期归档、按大小分流等其他整理规则。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)