下载文件夹堆了几百个文件?按文件名关键字一键归档

2026-10-02 · 喵窝资源铺

「下载」文件夹里发票、报销单、合同、截图混成一锅粥,想找文件全靠 Ctrl+F——这个场景太常见了。手动建文件夹再一个个拖?几百个文件能拖到你怀疑人生。这篇给一个 30 行、零依赖(只用标准库) 的脚本:按文件名关键字自动分进对应文件夹。本文代码实跑验证,真实输出见下。

完整脚本

不需要 pip 装任何东西。存为 file_sort.py,先改脚本顶部的 RULES(关键字 → 文件夹名,按你的文件习惯增删),然后运行 python file_sort.py 你的目录:

"""按文件名关键字批量归档。用法:python file_sort.py [目录]"""
import os, shutil, sys

RULES = {  # 关键字 -> 归档文件夹名(按需增删)
    "发票": "发票",
    "报销": "报销",
    "合同": "合同",
    "随手拍": "图片",
}

src = sys.argv[1] if len(sys.argv) > 1 else "."
moved, skipped = 0, 0
for name in sorted(os.listdir(src)):
    p = os.path.join(src, name)
    if not os.path.isfile(p):
        continue  # 只处理文件,不动文件夹
    hit = None
    for kw, folder in RULES.items():
        if kw in name:
            hit = folder
            break  # 第一个命中的关键字生效
    if hit:
        d = os.path.join(src, hit)
        os.makedirs(d, exist_ok=True)
        target = os.path.join(d, name)
        if os.path.exists(target):  # 同名不覆盖,加序号
            i = 1
            base, ext = os.path.splitext(name)
            while os.path.exists(target):
                target = os.path.join(d, f"{base}_{i}{ext}")
                i += 1
        shutil.move(p, target)
        moved += 1
    else:
        skipped += 1
print(f"归档 {moved} 个,未匹配 {skipped} 个(留在原地不动)")

实测输出

测试目录里有 7 个杂文件(发票×2、合同×2、报销单×2、随手拍.png、一个空文件夹),跑一次:

归档 7 个,未匹配 1 个(留在原地不动)

发票/
  发票2026-01-张三.pdf
  发票2026-02-李四.pdf
合同/
  合同-办公租赁.docx
  合同-劳务外包.docx
报销/
  报销单0312.xlsx
  报销单0315.xlsx
图片/
  随手拍.png

几个关键设计(都是真实踩过的坑)

进阶玩法

💡 这类活不想自己折腾?

喵窝资源铺提供代写定制脚本服务:你说需求,我们写好、测好、附使用说明交付。¥19.9 起,验证通过即发货。→ 看看服务详情 | → 免费工具清单(订阅后发邮箱)

虚拟物品交付后不退款;未收到或未达承诺免费补发/重做。

相关阅读:微信群接龙转Excel · CSV批量合并去重 · 批量重命名 · Excel清洗脚本 · 办公室Python自动化 · 1小时调研方法论