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 入门很友好的学习路径。
- 点赞
- 收藏
- 关注作者
评论(0)