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

如何统计文件夹中某剧集的集数?求通用Python实现方案

统计文件夹中剧集集数的解决方案

需求说明

需要统计指定文件夹内某剧集的总集数,文件名格式多样,但均包含类似S01E01(季数+集数)的标识,例如:

  • name.S01E01.720p.WEB-DL.mkv
  • name.Joint.Economic.Area.S01E01.720p.NF.WEBRip.x264-GalaxyTV

现有代码的问题

你之前尝试的代码存在两处明显问题:

  1. num = 01是语法错误,Python中整数不能以0开头(除非是八进制数前缀0o)
  2. any(str(num) in file.name)逻辑错误,any()需要传入可迭代对象,且直接判断数字子串存在会误匹配文件名中包含数字但并非集数的情况

专业实现方案

使用正则表达式匹配文件名中的季集标识,能精准适配各种格式的文件名,代码如下:

import os
import re

def count_episodes(path):
    # 匹配SxxExx格式的正则,支持多位数的季/集数,兼容大小写
    pattern = re.compile(r'S(\d+)E(\d+)', re.IGNORECASE)
    episodes = set()
    
    with os.scandir(path) as files:
        for file in files:
            # 只处理文件,跳过文件夹
            if file.is_file():
                match = pattern.search(file.name)
                if match:
                    # 提取季数和集数,补零统一格式后加入集合自动去重
                    season_num = match.group(1).zfill(2)
                    ep_num = match.group(2).zfill(2)
                    episodes.add((season_num, ep_num))
    
    # 按季分组统计集数
    season_ep_count = {}
    for season, ep in episodes:
        season_ep_count[season] = season_ep_count.get(season, 0) + 1
    
    # 输出统计结果
    print("剧集统计结果:")
    for season in sorted(season_ep_count.keys()):
        print(f"第{season}季:{season_ep_count[season]}集")
    print(f"总集数:{len(episodes)}")

# 使用示例,替换为你的文件夹路径
count_episodes("/path/to/your/series/folder")

代码说明

  • 正则表达式r'S(\d+)E(\d+)'会匹配文件名中任意位置的季集标识,re.IGNORECASE可兼容小写的sxxexx格式
  • 用集合episodes存储季数和集数的组合,自动跳过重复文件(比如同一集的不同版本)
  • 对季数和集数补零统一格式,避免因数字格式差异(如S1E1和S01E01)导致的重复统计
  • 最终按季分组输出统计结果,同时给出总集数

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 01:42:16