十年匠心定制 · 商业建站与技术教学双线并行 咨询热线:400-886-1026 service@lmnt.cn
ARTICLE DETAIL

资讯详情

深耕网站建设与运营推广的一线实战洞察。

批量下载完混杂文件后,我用 Python 实现了全自动分类整理

批量下载完混杂文件后,我用 Python 实现了全自动分类整理 引言被混杂文件逼出来的自动化需求上周要从云盘批量拉取一批学习资料和常用软件跑完下载脚本后就先去忙别的等想起来整理的时候打开下载文件夹直接傻眼近百个文件堆在一个文件夹里有几十MB的风水堪舆PDF、几百KB的紫微斗数讲义、还有世界经典文学的TXT甚至混着一个169MB的Tor浏览器安装包文件名要么是带出版社的长标题要么是毫无意义的数字编号手动分类花了二十多分钟还漏了好几个文件当时就下定决心下次再也不手动整理了。一、整理前先做「三校验」避免白忙活这次整理之前我先踩了个坑之前跑下载脚本的时候因为服务器后台进程被SIGTERM强杀导致一部分文件没下完一开始没注意整理的时候才发现好几个PDF只有几MB远低于正常大小。所以这次我先把校验环节放到了最前面先确认下载进程的退出状态如果是正常退出exit code 0再继续如果是被强杀比如本次遇到的exit code -15对应SIGTERM信号先排查有没有漏下的文件排除下载时标记为「跳过」的项比如这次下载里的「无链接: 小王子.txt」因为没拿到有效下载链接根本没下载成功直接过滤过滤无效文件比如那个0KB的readme.txt是下载脚本生成的占位文件没有实际内容直接跳过。做完这三步之后剩下的都是有效文件再开始整理就不会做无用功。二、双层匹配规则解决「同后缀不同分类」难题一开始我试过单纯按文件后缀分类把所有PDF扔到一个文件夹所有DOC扔到另一个结果整理完还是找不到文件——因为PDF里既有《风水宝鉴完整版》这类命理资料也有《简爱》这类文学著作同后缀的文件用途完全不同。后来我改成了「后缀文件名关键词」的双层匹配规则先按后缀过滤掉明显不属于文档类的文件比如DMG直接归为安装包再对文档类文件匹配文件名里的特征关键词比如包含「阳宅」「阴宅」「梅花易数」「紫微斗数」的归为「命理风水资料」包含「简爱」「罗密欧与朱丽叶」「双城记」的归为「经典文学」剩下的没有匹配关键词的文档归为「其他文档」。这里举个实际的匹配案例这次下载里的《郑轲梅花易数.pdf》和《简爱.txt》都是PDF/TXT后缀单纯按后缀分会放到一起但匹配到「梅花易数」关键词就自动归到了命理资料里《简爱》匹配到文学关键词就归到了经典文学里分类准确率直接拉满。三、10行核心代码实现自动整理整个整理逻辑用Python实现不到50行核心的分类移动逻辑只有10行左右先定义分类规则字典再遍历所有有效文件匹配规则后移动到对应目录最后输出整理报告importosimportreimportshutil# 泛化后的下载目录避免泄露具体路径download_dir~/Downloads/hermes_batch# 分类规则关键词对应分类目录category_rules{命理风水资料:[阳宅,阴宅,风水,梅花易数,紫微斗数,面相,手相,麻衣相法,悟真篇,河洛],经典文学:[简爱,罗密欧与朱丽叶,双城记,巴黎圣母院,小王子],应用安装包:[.dmg,.exe],其他文档:[]}# 遍历下载目录下的所有文件forfilenameinos.listdir(download_dir):file_pathos.path.join(download_dir,filename)# 跳过目录和无效文件ifos.path.isdir(file_path)oros.path.getsize(file_path)0:continue# 先匹配后缀规则extos.path.splitext(filename)[1].lower()forcategory,keywordsincategory_rules.items():ifextinkeywords:target_diros.path.join(download_dir,category)os.makedirs(target_dir,exist_okTrue)shutil.move(file_path,target_dir)break# 后缀没匹配到的话匹配文件名关键词else:forcategory,keywordsincategory_rules.items():ifany(kwinfilenameforkwinkeywords):target_diros.path.join(download_dir,category)os.makedirs(target_dir,exist_okTrue)shutil.move(file_path,target_dir)breakelse:# 都没匹配到归为其他target_diros.path.join(download_dir,其他文档)os.makedirs(target_dir,exist_okTrue)shutil.move(file_path,target_dir)跑完之后不到1秒就把所有文件归位最终整理出3个分类目录总共整理了27个有效文件跳过了2个无效文件比手动整理快了几十倍。结尾可带走的三条效率经验这次整理虽然是小场景但总结出了三条通用的文件整理经验永远先校验再整理批量操作前先确认输入数据的有效性过滤掉无效项避免后续操作白费功夫分类规则要贴合实际场景不要用通用的默认规则比如这次如果只用后缀分类根本满足不了需求结合业务特征这里是文件名里的关键词设计规则才是最高效的小成本自动化投入产出比极高这种每次只需要10分钟但每周都要做的重复工作花10分钟写个脚本就能一劳永逸长期来看能省大量时间。
返回列表