Python按字符串匹配自动整理下载剧集到对应文件夹的技术问询
解决剧集文件自动整理的Python方案
嘿,作为Python新手能想到用自动化解决手动整理的麻烦,这思路超棒!你的方向是对的,咱们一步步把这个脚本完善起来,重点搞定字符串匹配和路径处理的问题。
先理清核心需求
你要实现的是:
- 遍历
Downloads目录下的所有文件夹(因为下载的文件存放在同名文件夹里) - 检查文件夹名是否匹配指定剧集的关键词(支持多关键词同时匹配,比如"Game"和"Thrones"都要出现)
- 将匹配到的文件夹里的视频文件(比如.mp4)移动到
TV Shows目录下对应的剧集文件夹
关键问题的解决思路
字符串匹配:用字典定义「目标文件夹名」和「对应匹配关键词」的映射,灵活支持多剧集、多关键词场景。比如:
show_mappings = { "Homeland": ["Homeland"], "Game of Thrones": ["Game", "Thrones"], "Breaking Bad": ["Breaking", "Bad"] }对每个文件夹名,检查是否满足某剧集的所有关键词都包含其中(忽略大小写更友好)。
路径处理:永远别用字符串拼接路径,用
os.path.join()或者Python 3.6+的f-string配合路径分隔符,避免转义错误和跨平台问题。安全操作:移动文件前先判断目标文件夹是否存在,不存在就创建;测试阶段可以先打印操作而不是真移动,避免误删文件。
完整可运行的代码示例
import os import shutil # 定义路径(用raw字符串避免转义问题,记得替换成你的实际路径) source_dir = r"C:\Users\YourUsername\Downloads" destination_root = r"C:\Users\YourUsername\TV Shows" # 定义剧集匹配规则:键是目标文件夹名,值是需要匹配的关键词列表 show_mappings = { "Homeland": ["Homeland"], "Game of Thrones": ["Game", "Thrones"], "Breaking Bad": ["Breaking", "Bad"] } # 遍历Downloads下的所有条目(文件夹和文件) for item_name in os.listdir(source_dir): item_path = os.path.join(source_dir, item_name) # 只处理文件夹(因为你的文件存在文件夹里) if not os.path.isdir(item_path): continue # 检查当前文件夹是否匹配某个剧集的关键词 matched_show = None folder_name_lower = item_name.lower() for show_name, keywords in show_mappings.items(): # 检查所有关键词都在文件夹名里(忽略大小写) if all(keyword.lower() in folder_name_lower for keyword in keywords): matched_show = show_name break if matched_show: # 构建目标文件夹路径 dest_folder = os.path.join(destination_root, matched_show) # 如果目标文件夹不存在,创建它(exist_ok=True避免重复创建报错) os.makedirs(dest_folder, exist_ok=True) # 遍历当前文件夹里的视频文件(可扩展支持更多格式) video_extensions = (".mp4", ".mkv", ".avi", ".mov") for file_name in os.listdir(item_path): if file_name.endswith(video_extensions): source_file = os.path.join(item_path, file_name) dest_file = os.path.join(dest_folder, file_name) # 处理文件已存在的情况(可选:跳过或重命名) if os.path.exists(dest_file): print(f"文件已存在,跳过:{dest_file}") continue # 移动文件 shutil.move(source_file, dest_file) print(f"已移动:{source_file} -> {dest_file}") else: # 没有匹配到的文件夹可以跳过或记录日志 print(f"未匹配到剧集:{item_name}")
对你伪代码的优化说明
- 替换字符串拼接路径为
os.path.join(),彻底避免路径格式错误 - 用
show_mappings解决了「destination_name未定义」的问题,同时支持多关键词匹配 - 增加了文件夹存在性检查和创建逻辑,避免移动时出错
- 加入视频格式过滤,只移动目标文件
- 增加文件已存在的处理,防止覆盖重要文件
新手友好提示
- 测试优先:先把
shutil.move换成print,确认所有匹配和路径都正确后再执行实际移动 - 忽略大小写:代码里用
.lower()处理了,不管文件夹名是homeland还是Homeland_S01E01都能匹配 - 扩展匹配规则:如果需要更灵活的匹配(比如正则表达式),可以把关键词换成正则模式,用
re.search()来匹配 - 错误处理:可以加上
try-except块捕获权限错误、文件正在使用等异常情况
内容的提问来源于stack exchange,提问作者Zachary Lane
相关产品推荐
相关产品推荐

