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
发票.pdf?第二个自动变成 发票_1.pdf。覆盖文件是归档脚本最不可饶恕的错误。os.path.isfile 过滤掉目录,否则已有的归档文件夹会被误处理。name.lower().endswith((".jpg",".png")) 即可。os.path.getmtime(p) 取修改时间,格式化成年月做文件夹名。rules.json,脚本读 JSON——改规则不用动代码。💡 这类活不想自己折腾?
喵窝资源铺提供代写定制脚本服务:你说需求,我们写好、测好、附使用说明交付。¥19.9 起,验证通过即发货。→ 看看服务详情 | → 免费工具清单(订阅后发邮箱)
虚拟物品交付后不退款;未收到或未达承诺免费补发/重做。
相关阅读:微信群接龙转Excel · CSV批量合并去重 · 批量重命名 · Excel清洗脚本 · 办公室Python自动化 · 1小时调研方法论