实现按数字自动归类文件至对应文件夹的脚本优化需求
批量归类剧集文件脚本优化方案
问题背景
现有Python脚本只能通过单数字参数执行(如move.py 1),将含对应数字标签的文件移动到同名文件夹(比如含ep1的文件移到Episode 1)。需要优化成支持指定起始和结束数字,自动批量完成所有剧集文件的归类。
优化后完整脚本
import os import sys import shutil # 基础路径,用os.path相关方法处理更兼容不同系统 base_path = "/Users/Macbook/Final Cut Pro/" def main(): # 校验命令行参数格式 if len(sys.argv) != 3: print("用法: python move.py <起始数字> <结束数字>") sys.exit(1) # 转换参数为整数,处理非数字输入的情况 try: start_num = int(sys.argv[1]) end_num = int(sys.argv[2]) except ValueError: print("错误:起始和结束数字必须是整数") sys.exit(1) # 循环处理每个剧集编号 for num in range(start_num, end_num + 1): episode_tag = f"ep{num}" dest_folder = os.path.join(base_path, f"Episode {num}") # 自动创建目标文件夹(不存在时) if not os.path.exists(dest_folder): os.makedirs(dest_folder) # 遍历所有子目录找目标文件 for root, dirs, files in os.walk(base_path): # 跳过已经归类的文件夹,避免重复处理 if root == dest_folder: continue for file_name in files: # 统一转小写避免大小写匹配问题 if episode_tag in file_name.lower(): source = os.path.join(root, file_name) dest = os.path.join(dest_folder, file_name) # 可选:避免覆盖已存在的文件 if os.path.exists(dest): print(f"警告:{file_name} 已在目标文件夹中,跳过") continue print(f"移动: {source} -> {dest}") shutil.move(source, dest) if __name__ == "__main__": main()
关键优化点说明
- 命令行参数支持范围:现在可以通过
python move.py 1 20直接处理1到20集的所有文件 - 自动创建文件夹:不用手动提前创建
Episode N文件夹,脚本会自动生成 - 路径处理更可靠:用
os.path.join替代手动拼接路径,适配不同操作系统的路径分隔符 - 避免重复处理:遍历文件时跳过已创建的目标文件夹,防止重复移动
- 错误处理:增加参数校验和非数字输入的报错提示,避免脚本崩溃
- 大小写兼容:文件名转小写后匹配,不管是
EP1还是ep1都能识别
内容的提问来源于stack exchange,提问作者bull11trc
相关产品推荐
相关产品推荐

