You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python按字符串匹配自动整理下载剧集到对应文件夹的技术问询

解决剧集文件自动整理的Python方案

嘿,作为Python新手能想到用自动化解决手动整理的麻烦,这思路超棒!你的方向是对的,咱们一步步把这个脚本完善起来,重点搞定字符串匹配和路径处理的问题。

先理清核心需求

你要实现的是:

  • 遍历Downloads目录下的所有文件夹(因为下载的文件存放在同名文件夹里)
  • 检查文件夹名是否匹配指定剧集的关键词(支持多关键词同时匹配,比如"Game"和"Thrones"都要出现)
  • 将匹配到的文件夹里的视频文件(比如.mp4)移动到TV Shows目录下对应的剧集文件夹

关键问题的解决思路

  1. 字符串匹配:用字典定义「目标文件夹名」和「对应匹配关键词」的映射,灵活支持多剧集、多关键词场景。比如:

    show_mappings = {
        "Homeland": ["Homeland"],
        "Game of Thrones": ["Game", "Thrones"],
        "Breaking Bad": ["Breaking", "Bad"]
    }
    

    对每个文件夹名,检查是否满足某剧集的所有关键词都包含其中(忽略大小写更友好)。

  2. 路径处理:永远别用字符串拼接路径,用os.path.join()或者Python 3.6+的f-string配合路径分隔符,避免转义错误和跨平台问题。

  3. 安全操作:移动文件前先判断目标文件夹是否存在,不存在就创建;测试阶段可以先打印操作而不是真移动,避免误删文件。

完整可运行的代码示例

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未定义」的问题,同时支持多关键词匹配
  • 增加了文件夹存在性检查和创建逻辑,避免移动时出错
  • 加入视频格式过滤,只移动目标文件
  • 增加文件已存在的处理,防止覆盖重要文件

新手友好提示

  1. 测试优先:先把shutil.move换成print,确认所有匹配和路径都正确后再执行实际移动
  2. 忽略大小写:代码里用.lower()处理了,不管文件夹名是homeland还是Homeland_S01E01都能匹配
  3. 扩展匹配规则:如果需要更灵活的匹配(比如正则表达式),可以把关键词换成正则模式,用re.search()来匹配
  4. 错误处理:可以加上try-except块捕获权限错误、文件正在使用等异常情况

内容的提问来源于stack exchange,提问作者Zachary Lane

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.07 16:47:57