如何从文件路径中提取ep+三位数字格式的剧集编号并拼接新路径
提取路径中的episode编号并拼接新路径的Python实现
我来帮你搞定这个需求,刚好这种固定格式的编号提取用Python很容易实现,下面给你两种可靠的方案:
方案一:正则表达式(推荐,精准高效)
因为你的目标是匹配ep开头+3位数字(001-999)的文件夹名,正则表达式是最直接的方案,能精准匹配这种固定模式的字符串。
import re def extract_episode_and_build_path(file_path): # 定义正则模式:匹配ep开头,后跟恰好3位数字 episode_pattern = r'ep\d{3}' # 在路径中查找所有匹配的字符串 matched_episodes = re.findall(episode_pattern, file_path) if matched_episodes: episode_number = matched_episodes[0] # 额外验证数字部分是否在001-999范围内(排除ep000这类无效值) num = int(episode_number[2:]) if 1 <= num <= 999: # 用f-string拼接新路径,语法更简洁直观 new_path = f"Y://work/{episode_number}/comp/" return episode_number, new_path # 如果没有找到符合要求的编号,返回None return None, None # 测试示例路径 sample_path = "N://out/ep001/FX/maya/file4984.ma" ep_num, result_path = extract_episode_and_build_path(sample_path) if ep_num: print(f"提取到的episode编号: {ep_num}") print(f"拼接后的新路径: {result_path}") else: print("未找到符合格式的episode编号")
代码说明:
r'ep\d{3}':正则表达式的核心,ep是固定前缀,\d{3}表示恰好匹配3位数字re.findall会找出路径中所有符合模式的字符串,我们取第一个结果(因为路径里应该只有一个目标文件夹)- 增加数字范围验证,确保提取的编号是001到999之间的有效编号
- 使用f-string拼接路径,比传统的加号拼接更易读且不易出错
方案二:拆分路径逐个检查(无需正则)
如果你对正则表达式不太熟悉,也可以通过拆分路径的每个组件,逐个检查是否符合格式:
import os def extract_episode_and_build_path(file_path): # 拆分路径的所有组成部分(兼容不同系统的路径分隔符) path_components = file_path.split(os.sep) for component in path_components: # 检查:长度为5(ep+3位数字)、以ep开头、后三位是数字 if len(component) == 5 and component.startswith('ep') and component[2:].isdigit(): num = int(component[2:]) if 1 <= num <= 999: new_path = f"Y://work/{component}/comp/" return component, new_path return None, None # 测试示例路径 sample_path = "N://out/ep001/FX/maya/file4984.ma" ep_num, result_path = extract_episode_and_build_path(sample_path) if ep_num: print(f"提取到的episode编号: {ep_num}") print(f"拼接后的新路径: {result_path}") else: print("未找到符合格式的episode编号")
代码说明:
os.sep会自动适配当前系统的路径分隔符(比如Windows的\或Linux的/),让代码更通用- 遍历路径的每个部分,通过长度、前缀、数字验证三个条件筛选出目标编号
- 同样加入了001-999的范围验证,保证编号有效性
内容的提问来源于stack exchange,提问作者William Eguienta
相关产品推荐
相关产品推荐

