Python 入门实战:用标准库写一个下载文件夹自动归档工具
【摘要】 用 Python 标准库 pathlib 与 shutil 写一个按扩展名自动归档文件的实用工具:字典映射分类、重名自动加序号、常见避坑提示一应俱全,适合新手的第一个实战小项目,全程零第三方依赖。
为什么写这个工具
下载文件夹总是越堆越乱:安装包、图片、文档、压缩包混在一起,找文件全靠搜索。其实用 Python 标准库几十行代码,就能按扩展名把文件自动分门别类。本文适合刚学完 Python 基础语法、想做第一个小项目的同学,全程只用标准库,不用 pip 安装任何东西。
整体思路
- 用 pathlib 遍历目标文件夹里的文件;
- 按扩展名把文件映射到分类目录(图片、文档、压缩包、其他);
- 用 shutil.move 把文件移动过去,遇到重名自动加序号,避免覆盖;
- 只处理文件、跳过子目录,避免误伤。
完整代码
from pathlib import Path
import shutil
CATEGORIES = {
"图片": {".jpg", ".png", ".gif", ".webp"},
"文档": {".pdf", ".docx", ".md", ".txt"},
"压缩包": {".zip", ".rar", ".7z"},
}
def target_dir(path: Path) -> str:
for name, exts in CATEGORIES.items():
if path.suffix.lower() in exts:
return name
return "其他"
def unique(dest: Path) -> Path:
if not dest.exists():
return dest
i = 1
while True:
cand = dest.with_name(f"{dest.stem}_{i}{dest.suffix}")
if not cand.exists():
return cand
i += 1
def organize(folder: str) -> None:
root = Path(folder)
for item in root.iterdir():
if item.is_file():
dest_dir = root / target_dir(item)
dest_dir.mkdir(exist_ok=True)
shutil.move(str(item), str(unique(dest_dir / item.name)))
print("已归档:", item.name)
if __name__ == "__main__":
organize(r"D:\Downloads")
几个容易踩的坑
- Path.suffix 只能取最后一个扩展名,file.tar.gz 会被识别成 .gz,介意的话可以用 name.endswith 判断双扩展名;
- 移动文件前要先确保目标分类目录存在,否则 shutil.move 可能把文件直接重命名成目录名;
- 第一次运行前,先拿一个测试文件夹练手,确认逻辑无误后再对真实目录下手,文件操作没有后悔药;
- Windows 路径记得用原始字符串,或者统一用正斜杠,避免转义字符惹麻烦。
小结
这个小工具用到的都是标准库:pathlib 负责路径处理,shutil 负责文件移动,代码量不大,但把字典映射、函数拆分、重名规避这些基本功都练到了。从语法学习走向实战,最快的方式就是解决自己日常的小麻烦。后续还可以给它加上日志记录、按月份分子目录、支持命令行参数等功能,留给大家动手练一练。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)