Python 批量整理下载文件夹:用 pathlib 按扩展名自动归类

举报
yd_70403235 发表于 2026/11/07 09:15:59 2026/11/07
【摘要】 下载文件夹越用越乱,本文用 Python 标准库 pathlib 写一个十几行的小工具,按扩展名自动把文件归类到子文件夹,并给出实测验证结果与注意事项。

Python 批量整理下载文件夹:用 pathlib 按扩展名自动归类

背景

下载文件夹用久了总会变成“杂物间”:文档、图片、表格、安装包混在一起,找文件全靠搜索。手动一个个拖到子文件夹既耗时又容易漏,写个十几行的小脚本就能一劳永逸。本文用 Python 标准库 pathlib 实现一个按扩展名自动归类的小工具,不依赖任何第三方库。

实现思路

核心逻辑只有三步:

  1. 遍历目标文件夹下的所有文件;
  2. 按文件后缀查一张“扩展名 → 文件夹名”的映射表;
  3. 把文件移动到对应的子文件夹,子文件夹不存在就自动创建。

映射表用字典表示,方便随时增减规则;没有命中任何规则的文件统一放进“其他”,避免误删或漏处理。注意只处理文件本身,跳过已有的子文件夹,防止把刚建好的分类目录又搬一遍。

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)

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。