Python批量修改文件名解决TinyMediaManager 刮削动漫错误的问题

广瑞
2023-12-01

目的

目的是为了解决在 VCB-Studio、Lolihouse 等压制组下载的 BDrip 动漫无法被 TinyMediaManager 正确地搜索并且刮削的问题。修改文件名后,文件就能被 TinyMediaManager 正确地搜索并且刮削了。


代码

这个程序是用 Python 写的,主要用于修改文件名,并将文件移动到新的文件夹中。

import os
import re
import shutil

folder_path = os.path.dirname(os.path.abspath(__file__)) #获取当前文件所在的文件夹
season_folder = "Season X" #新建文件夹的名称

# 指定文件扩展名
extensions = ('.mkv', '.ass', '.ssa', '.mp4')

# 遍历文件夹中的所有文件
for file_name in os.listdir(folder_path):
    # 如果文件名以指定扩展名结尾
    if file_name.endswith(extensions):
        matchs = re.finditer(r'\d{2}', file_name)
        for match in matchs:
            num = match.group()
            # 构造新的文件名
            new_file_name = num + file_name[-4:]
            # 构造新的文件路径
            new_file_path = os.path.join(folder_path, new_file_name)
            # 构造旧的文件路径
            old_file_path = os.path.join(folder_path, file_name)

            if os.path.exists(new_file_path):
                #文件已经存在,打印日志
                print(f"{new_file_path} already exists, skipping.")
            else:
                #记录文件的时间戳
                old_time = os.path.getmtime(old_file_path)
                os.rename(old_file_path, new_file_path)
                os.utime(new_file_path,(old_time,old_time))
                break

#创建新文件夹
season_folder_path = os.path.join(folder_path,season_folder)
if not os.path.exists(season_folder_path):
    os.makedirs(season_folder_path)

#移动文件
for file_name in os.listdir(folder_path):
    if file_name.endswith(extensions):
        src_path = os.path.join(folder_path, file_name)
        dst_path = os.path.join(season_folder_path, file_name)
        shutil.move(src_path, dst_path)

在这段代码中,首先使用 'os.path.dirname(os.path.abspath(__file__))' 来获取当前文件所在的文件夹的路径,然后遍历文件夹中的所有文件。对于文件名以指定扩展名结尾的文件,使用正则表达式 're.finditer(r'\d{2}', file_name) '来匹配文件名中的二位数字,并取第一个。然后构造新的文件名,比如将 "[ReinForce] Bakemonogatari - 01 (BDRip 1920x1080 x264 FLAC).mkv" 改为 "01.mkv"。

接着使用 'os.rename(old_file_path, new_file_path) '来重命名文件,并使用 'os.makedirs(season_folder_path) '创建一个新的文件夹。最后使用 'shutil.move(src_path, dst_path) '将文件移动到新的文件夹中。

程序中也有判断文件是否存在,如果存在就不做修改。


如何使用

使用这个程序非常简单,只需要把程序文件放在需要重命名文件的文件夹里,并运行程序即可。

程序会自动扫描文件夹中的文件,对于满足条件的文件进行重命名并移动到新文件夹中。

如果需要更改新文件夹的名称,可以在程序中修改:

season_folder = "Season X" #新建文件夹的名称

如果需要匹配其他格式的文件,可以在程序中修改:

extensions = ('.mkv', '.ass', '.ssa', '.mp4')

如果需要重命名的文件不在当前目录,可以在程序中修改:

folder_path = os.path.dirname(os.

如果修改文件名后不需要移动文件到新文件夹,可以在程序中删除下面这段代码:

#创建新文件夹
season_folder_path = os.path.join(folder_path,season_folder)
if not os.path.exists(season_folder_path):
    os.makedirs(season_folder_path)

#移动文件
for file_name in os.listdir(folder_path):
    if file_name.endswith(extensions):
        src_path = os.path.join(folder_path, file_name)
        dst_path = os.path.join(season_folder_path, file_name)
        shutil.move(src_path, dst_path)

这段代码用于创建新文件夹和移动文件,删除这段代码后就不会有文件被移动到新文件夹中了。


注意事项

在使用程序之前,请注意备份文件夹中的文件,因为程序将会直接修改文件名并移动文件。

程序运行完成后,注意修改文件夹名Season X

 类似资料: