问题描述
我正在尝试编写一个脚本来重命名我在外部硬盘驱动器上的所有电视节目文件。使用正则表达式,它应该找到每一集的季节和集数,然后按照我在下面的代码中指定的特定格式重命名文件。我面临的问题是我在运行它时不断收到以下错误。
Here is the error I'm encountering
这是我的代码:
import os,re
file_name_regex = re.compile(r'[s]\d{2}[e]\d{2}',re.IGnorECASE)
root_name_regex = re.compile(r'\\?(.+?)\\|(.+)')
listing = os.walk('E:\\TV Shows')
for root,directories,files in listing:
for f in files:
if re.search(file_name_regex,f):
matched_file_name = file_name_regex.search(f)
#Gives you the season / episode numbers
season_episode_identify = matched_file_name.group()
#Gives you the name of the TV show
path_list = root_name_regex.findall(root)
tv_show_name = path_list[2][0]
new_file_path = os.path.join(root,tv_show_name + ' ' + season_episode_identify)
old_file_path = os.path.join(root,tv_show_name,f)
print(f'Renaming "{old_file_path}" to "{new_file_path}"...')
os.rename(old_file_path,new_file_path)
在此先感谢您的帮助!!
解决方法
你的代码有点乱。考虑使用 pathlib module。你可以做类似的事情
from pathlib import Path
path_root = Path('E:\\TV Shows')
for path_file in path_root.rglob('*.*'):
file_name_regex.search(path_file.name)
....
路径的解析也可以使用单个重新模式来完成。
您得到的错误可能是由于缺少子目录。您不能将文件移动到不存在的目录。您必须事先创建它。使用 pathlib 你可以做类似的事情
new_file_path.parent.mkdir(parents=True,exist_ok=True)
但您也可以使用 os.mkdir()