摘要:下载目录乱成一锅粥?本文用 Python + AI 提示词做一个可复用的"文件批量整理"脚本,把 3 小时的手工活儿压缩到 10 分钟。附完整可运行代码、3 个真实避坑点,以及一条能让 AI 一次产对代码的提示词模板。

一、背景与需求:为什么这份活非干不可

几乎每个开发者的下载目录都是一场灾难:微信收到的安装包、爬虫抓的 csv、随手存的设计稿、各种 .tmp 临时文件挤在一起。按类型和日期归好类,手点要一两个小时;每次下载完都要整理一次,累且低效。

需求归纳起来只有三条:

  1. 文件类型归到子目录(图片、文档、压缩包、安装包……)
  2. 下载日期再细分(避免同年同类全堆一起)
  3. 只搬运、不误删,撞名时自动避让

这种"逻辑清晰但写起来琐碎"的脚本,正是 AI 最擅长的。但直接让 AI 一把梭,往往会得到"能跑但一堆坑"的代码。正确姿势是:用提示词让 AI 生成初稿,你负责审查和技术把关

二、技术选型:为什么是 Python + 提示词

整理文件是典型的文件系统操作,Python 的标准库 osshutil 就够了,不用装任何第三方依赖,哪里都能跑。选 Python 而不是 Shell 脚本,是因为它的跨平台一致性和可读性,后续想加规则(按大小、按修改时间)也容易。

而"提示词"在这里的角色,是把需求精确翻译成代码。关键在于:给足上下文、说清约束、要它先给方案再给代码。下面这版提示词是我用下来产出最稳的。

三、核心提示词(复制即用)

你是资深 Python 工程师,帮我写一个"文件批量整理"脚本。

背景:
- 一个目录里堆满各种文件,类型杂、无规律
- 需要按文件类型分到不同子文件夹,再按日期细分一层
- 不希望删除任何原文件,只是移动

约束:
- 只用标准库 os / shutil,不引入第三方依赖
- 文件类型映射用字典维护(图片、文档、压缩包、安装包、其他)
- 移动时如果目标已存在同名文件,自动加序号重命名,绝不能覆盖
- 输出每一步移动的日志,便于核对
- Windows 和 macOS 都能跑,文件路径用 pathlib 处理,避免乱码

输出要求:
- 先给出实现思路(3-5 条),再给完整代码
- 代码里关键逻辑加中文注释
- 最后列出 3 个最容易踩的坑

让 AI 先讲思路再给代码,能逼它把逻辑理清,比直接甩代码靠谱得多。你拿到的初稿,重点审查两处:类型映射是否完整撞名避让是否真的不会覆盖

四、完整代码(可运行)

from pathlib import Path
import shutil

# 文件类型 -> 目标子目录 的映射
TYPE_MAP = {
    "图片": {".jpg", ".jpeg", ".png", ".gif", ".webp", ".svg"},
    "文档": {".pdf", ".docx", ".xlsx", ".pptx", ".txt", ".md"},
    "压缩包": {".zip", ".rar", ".7z", ".tar", ".gz"},
    "安装包": {".exe", ".dmg", ".msi", ".apk"},
}

def classify(path: Path) -> str:
    """按后缀判断归到哪个分类;未知类型进'其他'"""
    suffix = path.suffix.lower()
    for folder, exts in TYPE_MAP.items():
        if suffix in exts:
            return folder
    return "其他"

def unique_dest(dest: Path) -> Path:
    """目标已存在同名文件时,自动加序号,绝不覆盖"""
    if not dest.exists():
        return dest
    stem, suffix = dest.stem, dest.suffix
    i = 1
    while True:
        cand = dest.with_name(f"{stem}_{i}{suffix}")
        if not cand.exists():
            return cand
        i += 1

def organize(src_dir: Path) -> None:
    if not src_dir.exists():
        print(f"目录不存在: {src_dir}")
        return
    for item in src_dir.iterdir():
        if item.is_dir():
            continue  # 只整理文件,跳过子文件夹
        folder = classify(item)
        # 按 "分类/日期" 建目录
        date_dir = src_dir / folder / item.stat().st_mtime.strftime("%Y-%m")
        date_dir.mkdir(parents=True, exist_ok=True)
        dest = unique_dest(date_dir / item.name)
        shutil.move(str(item), str(dest))
        print(f"移动: {item.name} -> {date_dir} (重名处理: {dest.name})")

if __name__ == "__main__":
    organize(Path("./downloads"))  # 改成你的目标目录

说明:这里日期我取的是 st_mtime(文件最后修改时间)。如果你是按"下载日期",一般修改时间就够用;更精确的做法是改成 st_ctime(创建时间),但它在不同平台语义有差异,需要你按实际场景取舍——这正是应该人工把关的那类细节。

五、运行效果

把脚本放到乱糟糟的目录同层,改一下 organize(Path("./downloads")) 里的路径,直接 python organize_files.py。会看到一串移动日志,文件名被归类到 图片/2026-09/文档/2026-09/ 这类子目录。建议你实际跑一遍,并把执行前后的目录对比截个图——CSDN 的算法对"有实操、有图"的文章权重更高

六、避坑指南(3 个最容易踩的坑)

  1. 路径乱码:Windows 下中文路径容易出问题。一定用 pathlib.Path 而不是手拼字符串,给 ai 的提示词里也明确写这条,能省掉一大半麻烦。
  2. 误覆盖源文件:这是最致命的。撞名时必须先查 exists()、再自动加序号,绝不能直接 move 覆盖。上面 unique_dest 就是干这个的。
  3. 误判类型.tar.gz 这类双后缀,suffix 只取到 .gz。如果你有这种文件,要么在映射里单独加,要么提醒 AI 处理复合后缀,别让它静默归进"其他"。

七、把提示词沉淀成可复用的模板

上面那版提示词的价值,不只这一次。把"背景 + 约束 + 输出要求"这个结构固定下来,你就有了一个可复用的"生成运维小脚本"提示词框架:换掉背景描述,就能让 AI 帮你写批量改名、日志清理、巡检汇总……所有类似的琐碎脚本。

八、小结

AI 不是替你把活干完,而是把"能说清楚需求的活"交给它,把"需要判断的活"留给你。给足上下文、让它先讲思路、再审查关键点(撞名、乱码、类型映射),你就能用 10 分钟换来本要 3 小时的手工整理。


如果这篇对你有用,欢迎点赞 + 收藏;技术细节有疑问的直接评论区聊,我看到都会回。源码逻辑都在上面,复制即用,记得跑一遍配个图更保险。

Logo

有“AI”的1024 = 2048,欢迎大家加入2048 AI社区

更多推荐