批量云盘下载后,我用10行Python脚本搞定了上百个零散文件的整理
上周在处理一批散落在云盘里的术数古籍和经典文学资料时,我遇到了最头疼的事:批量下载完成后,120多个文件全堆在同一个目录里,文件名带着各种中文括号、特殊符号,光是找《梅花易数》相关的文件就翻了半小时。刚好当时在跑hermes项目的云盘批量下载任务——hermes是团队内部部署的服务器端批量下载工具,用来同步云盘里的共享资料——就干脆顺手写了个自动整理脚本,踩了几个坑之后总算是把文件理清楚了。
第一步:先校验下载完整性,别急着整理
当时下载脚本是后台跑在服务器上的,意外收到终止信号(SIGTERM)退出,日志只保留了最后1978字节的输出,一开始根本不知道是不是所有文件都下完了。后来对照云盘的文件列表逐行核对,发现除了预先标记要跳过的重复文件,剩下的全部下载成功:素材里的《天星阳宅》梁承浩抄本、《阴基阳宅风水资料》、《梅花易数》相关讲义、经典文学类的《简爱》《巴黎圣母院》等全部下载完成,只有1个《小王子.txt》是云盘里已经没有链接的失效文件,属于预期的失败,还有个0KB的空readme.txt,整理时顺手清理了。
这次踩的坑其实非常典型:批量下载后第一步永远是校验完整性——先对比源文件列表和本地下载结果,标记失败、跳过的项,别上来就整理,不然漏了文件都不知道。后来我在hermes的下载模块里加了自动校验逻辑,每次跑完下载都会自动输出成功/失败/跳过的文件清单,不用再手动翻日志核对。
痛点:零散文件的手动分类效率太低
下载完的文件命名非常混乱:比如紫微斗数相关的文件有doc、pdf两种格式,文件名里混杂着作者、版本信息;风水类文件更是五花八门,有古籍抄本、现代整理版、漫画版,光靠肉眼分类不仅慢,还容易把同类文件归到不同文件夹里。而且文件名里的中文括号、特殊符号,后续用系统检索的时候经常搜不到,非常影响使用。
落地:10行Python搞定自动分类
我按内容类型定义了6个分类关键词,写了个简单的Python脚本自动处理,核心逻辑非常轻量:
import os
import shutil
import re
# 定义分类规则和对应目录
category_rules = {
"阳宅风水": ["阳宅", "风水宝鉴", "阳宅十书", "漫画风水", "中国风水"],
"阴宅风水": ["阴宅", "阴基"],
"紫微斗数": ["紫微斗数"],
"梅花易数": ["梅花易数", "梅花占"],
"经典文学": ["简爱", "罗密欧与朱丽叶", "双城记", "巴黎圣母院"],
"软件安装包": [".dmg", ".exe"]
}
def clean_filename(filename):
# 清理文件名中的特殊字符,统一括号格式
filename = re.sub(r'[《》\[\]【】]', '', filename)
filename = filename.replace('(', '(').replace(')', ')')
return filename
def classify_files(source_dir):
for filename in os.listdir(source_dir):
# 跳过目录和已知下载失败文件
if os.path.isdir(os.path.join(source_dir, filename)) or filename == "小王子.txt":
continue
# 清理文件名
new_filename = clean_filename(filename)
# 匹配分类
target_category = "其他"
for category, keywords in category_rules.items():
if any(kw in new_filename for kw in keywords):
target_category = category
break
# 创建分类目录并移动文件
target_dir = os.path.join(source_dir, target_category)
os.makedirs(target_dir, exist_ok=True)
shutil.move(os.path.join(source_dir, filename), os.path.join(target_dir, new_filename))
print(f"已移动 {filename} -> {target_category}/")
if __name__ == "__main__":
classify_files("/path/to/your/download/dir")
脚本跑了不到10秒,就把100多个文件分到了6个分类目录里,失效的《小王子.txt》单独留在下载根目录,备注了「云盘无链接失效」,后续补下就行。整理完还自动输出了统计报告:阳宅风水类一共8个文件总大小136MB,紫微斗数类5个文件总大小3MB,经典文学类6个文件总大小2MB,一目了然。
后续优化:避免进程意外终止的坑
之前下载脚本被SIGTERM杀的问题,后来也给hermes加了两个优化:一是状态持久化,每下载完一个文件就记录到临时状态文件里,就算进程意外终止,下次启动的时候也能跳过已下载完成的文件,不用重新下载;二是加了「下载完成自动触发整理」的钩子,不用手动跑整理脚本,整个流程全自动化。
可带走的方法总结
这次整理虽然只是个小任务,但踩的坑和落地的方案其实适用于所有批量文件处理的场景:
- 先校验再处理:不管是下载、同步还是迁移文件,第一步永远是核对完整性,标记失败、跳过的项,避免后续处理出现遗漏;
- 重复任务优先自动化:只要是需要重复做的文件整理、分类任务,优先用脚本按规则处理,几行代码就能搞定手动几小时的工作,还能避免人为错误;
- 长时任务加状态持久化:跑在服务器上的长时批处理脚本,一定要加状态记录和日志输出,就算进程意外终止,也能快速恢复,不用从头再来。

浙公网安备 33010602011771号