6.1 剧集批量重命名

6.1.1 场景

通常,在线下载的剧集来源不同,文件命名五花八门,需要重新命名,整理到相应给文件夹中。当剧集比较多时, 手工命名比较麻烦,常规的解决方式是:安装批量命名软件,实现批量命名。然而,网上很多批量命名软件来源复杂,功能参差不齐,安装后往往需要注册激活,问题很多。因此,很有必要通过Python代码实现这些功能,避免这些问题。


6.1.2 功能需求

Python编程需要实现2个功能:

  • 剧集的批量重命名

  • 剧集存放到指定的文件夹内(文件夹命名:剧集名/季)


6.1.3 原理

程序包

  • os 是Python内置的程序包,主要功能是文件和文件夹的创建、命名等操作。

  • shutil 是Python内置程序包,主要功能是文件的移动等操作。

实现流程

  • 设定文件批量命名的替换参数(每次命名前修改)

  • 定义重命名rename()函数,实现功能如下:

    • 根据剧集名/季,生成指定的文件夹

    • os.listdir()获取文件夹内所有文件名,生成列表

    • 使用for循环和os.rename(),批量替换原文件名中无关部分,实现重命名

    • 使用shutil.move(),将命名后的文件批量移动到指定的文件夹。

  • 调用重命名函数rename(),完成批量命名和文件移动。


6.1.4 代码

# 剧集批量重命名

# 导入程序包
import os
import shutil

# 参数修改区
# 假定剧集名为:BBC.Africa.2013.EP01.BluRay.1080p.3Audio.DTS-HD.MA.5.1.x265.10bit-ALT
name = "非洲"            # 设定剧集名
season = "S01"            # 设定季
filename_head = "BBC.Africa.2013.EP"   # 设定剧集名前半部
filename_tail = ".BluRay.1080p.3Audio.DTS-HD.MA.5.1.x265.10bit-ALT"   # 设定剧集名后半部
path_raw =  r"W:\0.Download\0.TV\待处理"         # 设定待命名剧集的路径
path_dest = r"W:\0.Download\0.TV"               # 设定剧集最终存放路径

# 定义命名函数
def rename(name, season, filename_head, filename_tail):
    path1 = path_dest + "\\" + name   # 设定已命名剧集路径
    path2 = path1 + "\\" + season            # 设定已命名剧集的季路径
    os.mkdir(path1)                     # 生成已命名剧集文件夹
    os.mkdir(path2)                     # 生成已命名剧集的季文件夹
    os.chdir(path_raw)                      # 选择待命名剧集路径
    file_list0 = os.listdir(path_raw)     # 获取该路径文件名列表
    print("原始文件名列表是:", file_list0)
    replace_head = name + "." + season + "E"     # 设定命名参数:head
    replace_tail = ""                    # 设定命名参数:tail
    for file0 in file_list0:
        os.rename(file0, file0.replace(filename_head, replace_head)) # 替换文件头:head
    file_list1 = os.listdir(path_raw)      # 重新获取该路径文件名列表
    for file1 in file_list1:
        os.rename(file1, file1.replace(filename_tail, replace_tail))   # 替换文件尾:tail
    file_list2 = os.listdir(path_raw)      # 重新获取该路径文件名列表
    print("最终文件名列表是:", file_list2)
    for file2 in file_list2:
        shutil.move(path_raw + "\\" + file2, path2) # 移动所有文件到目标文件夹
    print("命名完成,文件已经移动到目标文件夹。")
    return

# 调用函数
rename(name, season, filename_head, filename_tail)

6.1.5 代码使用

  • 根据剧集信息,修改参数:name,season,filename_head,filename_tail

  • 设定剧集待命名目录,并修改参数:path_raw

  • 设定剧集最终存放目录,并修改参数:path_dest

  • 确保待命名目录内只有待命名剧集,没有其他文件

  • 运行上述代码,获得运行成功提示。

  • 打开剧集最终存放目录,查看是否成功命名。

分类: 教程笔记

管理员

管理员

SEIT资源站