😎Python 入门实战用 30 行代码自动整理杂乱文件夹
【摘要】 很多⼈的下载⽂件夹都有同⼀个问题:图⽚、⽂档、安装包、压缩包全堆在⼀起,时间⼀⻓,找⽂件全 靠搜索。其实这类重复劳动特别适合交给 Python,⽽且不需要安装任何第三⽅库,⽤系统⾃带的标准库 就能完成。 先说思路,⼀共三步:第⼀,遍历⽬标⽂件夹⾥的每⼀个⽂件;第⼆,看⽂件的扩展名,判断它属于哪 ⼀类;第三,把它移动到对应的⼦⽂件夹,⼦⽂件夹不存在就先创建。下⾯直接看代码: from path...
很多⼈的下载⽂件夹都有同⼀个问题:图⽚、⽂档、安装包、压缩包全堆在⼀起,时间⼀⻓,找⽂件全
靠搜索。其实这类重复劳动特别适合交给 Python,⽽且不需要安装任何第三⽅库,⽤系统⾃带的标准库
就能完成。
先说思路,⼀共三步:第⼀,遍历⽬标⽂件夹⾥的每⼀个⽂件;
第⼆,看⽂件的扩展名,判断它属于哪 ⼀类;
第三,把它移动到对应的⼦⽂件夹,⼦⽂件夹不存在就先创建。下⾯直接看代码:
from pathlib import Path
import shutil
source = Path.home() / "Downloads" # 要整理的⽂件夹,这⾥是下载⽬录
categories = {
"图⽚": [".jpg", ".jpeg", ".png", ".gif", ".webp"],
"⽂档": [".pdf", ".docx", ".txt", ".md", ".xlsx", ".pptx"],
"压缩包": [".zip", ".rar", ".7z", ".gz"],
"安装包": [".exe", ".msi", ".dmg", ".pkg"],
}
for file in source.iterdir():
if not file.is_file():
continue # 跳过⼦⽂件夹,只处理⽂件
ext = file.suffix.lower() # 扩展名统⼀转⼩写,避免 .JPG 漏掉
for folder, exts in categories.items():
if ext in exts:
target_dir = source / folder
target_dir.mkdir(exist_ok=True)
target = target_dir / file.name
if target.exists(): # 同名⽂件不覆盖,加序号区分
target = target_dir / f"{file.stem}_1{file.suffix}"
shutil.move(str(file), str(target))
print(f"{file.name} -> {folder}")
breakprint("整理完成")
把代码保存为 organize.py,在终端运⾏ python organize.py,就能看到每个⽂件被移到了哪⾥。⼏个
细节值得新⼿注意:⼀是 file.suffix 拿到的是带点的扩展名,所以字典⾥也要带点;⼆是⼤写扩展名很常
⻅,转成⼩写再⽐对才不会漏⽂件;三是移动前先判断⽬标⽂件是否已存在,直接覆盖是新⼿最容易踩
的坑,上⾯的做法是给重名⽂件加⼀个序号,简单⼜安全。
第⼀次运⾏建议先建⼀个测试⽂件夹,放⼏个随便新建的⽂件练⼿,确认逻辑没问题后再改成真实的下
载⽬录,别拿重要⽂件直接试验。另外,没归类的⽂件(⽐如视频、⾳频)会留在原地,你只要往
categories 字典⾥加⼀⾏ "视频": [".mp4", ".mkv", ".mov"] 就能扩展分类,这也是字典这种写法的⽅便
之处:改配置就⾏,不⽤动主逻辑。
这个⼩脚本还能继续进化:⽐如按⽇期再分⼀层⼦⽂件夹、把每次移动记录写进⼀个⽇志⽂件、或者⽤
定时任务每天⾃动跑⼀次。从这⼀个例⼦就能看出来,Python ⼊门最好的⽅式不是先啃完⼀本语法书,
⽽是找⼀个⾃⼰每天都遇到的⼩⿇烦,把它拆成⼏步写出来,跑通了,路径、循环、字典、⽂件操作这
些基础也就⼀起练了。
【声明】本内容来自华为云开发者社区博主,不代表华为云及华为云开发者社区的观点和立场。转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息,否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱:
cloudbbs@huaweicloud.com
- 点赞
- 收藏
- 关注作者
评论(0)