Python入门:写一个自动整理下载文件夹的小脚本

举报
yd_214896353 发表于 2026/11/03 06:04:23 2026/11/03
【摘要】 下载文件夹用久了,常常会变成一个“什么都有”的大杂烩:安装包、截图、文档、压缩包混在一起,找文件全靠搜索。刚学 Python 时,我不想先学一堆框架,就想做一件马上能用上的小事,于是写了这个自动整理脚本。它的思路很简单:按文件后缀把文件分到不同文件夹,遇到重名就自动改名,遇到自己不认识的类型就先放进“其他”里,绝不直接删除任何东西。先定规则,再写代码。规则越简单,脚本越不容易出错。我把常见类...

下载文件夹用久了,常常会变成一个“什么都有”的大杂烩:安装包、截图、文档、压缩包混在一起,找文件全靠搜索。刚学 Python 时,我不想先学一堆框架,就想做一件马上能用上的小事,于是写了这个自动整理脚本。它的思路很简单:按文件后缀把文件分到不同文件夹,遇到重名就自动改名,遇到自己不认识的类型就先放进“其他”里,绝不直接删除任何东西。

先定规则,再写代码。规则越简单,脚本越不容易出错。我把常见类型分成几类:图片放“图片”,文档放“文档”,压缩包放“压缩包”,安装包和程序放“安装包”,音频和视频放“音视频”,其余一律放“其他”。分类用的是一张后缀对照表,查表比写一长串 if 判断更清楚,以后想加一种类型,只要在表里加一行。

关键代码并不长。先用 pathlib 处理路径,它比拼接字符串更稳,也能跨平台使用;再用 shutil.move 移动文件。移动之前要先判断目标文件夹是否存在,不存在就创建。最容易被新手忽略的一点是重名处理:如果目标文件夹里已经有同名文件,直接移动会覆盖。我的做法是给新文件加序号,例如“报告(1).pdf”,直到找到一个不存在的名字为止。

from pathlib import Path
import shutil

RULES = {
    '图片': {'.jpg', '.jpeg', '.png', '.gif', '.webp'},
    '文档': {'.pdf', '.docx', '.txt', '.md', '.xlsx'},
    '压缩包': {'.zip', '.rar', '.7z'},
    '安装包': {'.exe', '.msi', '.dmg'},
    '音视频': {'.mp3', '.mp4', '.wav', '.mov'},
}

def target_folder(name: str) -> str:
    suffix = Path(name).suffix.lower()
    for folder, suffixes in RULES.items():
        if suffix in suffixes:
            return folder
    return '其他'

def unique_path(path: Path) -> Path:
    number = 1
    result = path
    while result.exists():
        result = path.with_name(f"{path.stem}({number}){path.suffix}")
        number += 1
    return result

def organize(source: Path) -> None:
    for item in source.iterdir():
        if not item.is_file():
            continue
        folder = source / target_folder(item.name)
        folder.mkdir(exist_ok=True)
        shutil.move(str(item), str(unique_path(folder / item.name)))

if __name__ == '__main__':
    organize(Path.home() / 'Downloads')

注意事项有三条。第一,先备份再运行,第一次最好把下载文件夹复制一份,或者先把脚本指向一个测试文件夹,确认分类结果符合预期后再用在真实文件夹上。第二,不要整理系统文件夹和正在使用的项目文件夹,只整理自己明确知道用途的下载文件夹。第三,脚本只按后缀分类,不会读取文件内容,所以改过后缀的文件可能被分错,这属于正常现象,发现后手动调整一次即可。

这个小脚本的价值不在于代码多巧妙,而在于它把一个真实问题拆成了三步:定规则、查表分类、安全移动。学会这三步之后,还可以继续扩展:比如按修改日期再分一层月份文件夹,或者把超过一定大小的文件单独列出来。先让脚本跑起来,再慢慢加功能,是 Python 入门很友好的学习路径。

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

评论(0)

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

全部回复

上滑加载中

设置昵称

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

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

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