Python 入门实践:写一个本地文件整理小工具,按类型自动归档

举报
f841705799 发表于 2026/11/01 10:19:05 2026/11/01
【摘要】 用 Python 标准库写一个本地文件整理小工具,按扩展名把下载文件夹里的文件自动归档,并用演练模式先验证再执行。

很多人都有同一个烦恼:下载文件夹越用越乱,安装包、图片、文档和压缩包混在一起,找文件要翻很久。其实不需要装整理软件,用 Python 标准库写一个几十行的小工具,就能按文件类型自动归档,而且每一步都看得见、改得动。

这个小工具的思路很简单。先列出目标文件夹里的文件,再根据扩展名判断它属于哪一类,然后把同类文件移到对应的子文件夹里。图片进“图片”,文档进“文档”,压缩包进“压缩包”,其余不认识的进“其他”,方便以后再分。

用 Python 3 自带的 pathlib 和 shutil 就够了,不用安装第三方库。pathlib 负责处理路径和扩展名,shutil.move 负责移动文件。这样写出来的脚本在 Linux、macOS 和 Windows 上都能跑,换电脑也不用重写。

核心逻辑只有三步。第一步,用 iterdir() 遍历文件夹,跳过子文件夹,只处理文件;第二步,用 suffix.lower() 取扩展名,在一张简单的映射表里查类别;第三步,如果目标子文件夹不存在就创建,再把文件移过去。映射表用字典写,改起来很直观,想加一种类型只要加一行。

from pathlib import Path
import shutil

RULES = {".jpg": "图片", ".png": "图片", ".pdf": "文档", ".txt": "文档", ".zip": "压缩包"}

def tidy(folder: Path, dry_run: bool = True):
    for item in folder.iterdir():
        if not item.is_file():
            continue
        target = folder / RULES.get(item.suffix.lower(), "其他")
        print(f"{item.name} -> {target.name}/")
        if not dry_run:
            target.mkdir(exist_ok=True)
            shutil.move(str(item), str(target / item.name))

if __name__ == "__main__":
    tidy(Path.home() / "Downloads")

运行前先用演练模式看一遍结果,是个好习惯。上面代码默认只打印“会把哪个文件移到哪里”,不真正移动。确认映射没有写错,再把 dry_run 改成 False 正式执行。这样即使规则写错,也不会把文件弄乱。

写的时候还有几个细节值得注意。第一,遇到同名文件不要直接覆盖,可以在文件名后加序号,或者先跳过并打印提示;第二,正在下载的临时文件不要动,例如 .part 和 .crdownload,等下载完成再整理;第三,整理前先备份重要文件,脚本本身也要排除在外,避免把自己移走。

这个小工具还可以继续扩展。按修改日期再分一层子文件夹,适合整理照片;按文件大小列出最大的十个文件,适合清理磁盘;把每次移动记录写进日志,出了问题可以按记录找回。这些扩展都不需要新知识,都是在已有逻辑上加一个判断或一次输出。

对初学者来说,这个练习的价值不在代码量,而在完整流程:从一个真实的小麻烦出发,拆成列出、分类、移动三步,用标准库实现,再用演练模式验证,最后留出扩展空间。先让它在测试文件夹里跑通,再用到真实的下载文件夹,你会发现,写工具和用工具一样,都有成就感。

【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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