在 python 中创建批量重命名脚本?

在 python 中创建批量重命名脚本?

首先,这个问题是对我上一个问题的后续:如何使用“变量”批量重命名文件?。我只是根据谢尔盖的建议重申这一点。

我使用 xmbc 观看电视节目。在开始使用 xmbc 之前,我批量下载了《死神》的前几季。我能说什么呢,我是一个动漫迷 ;-)。这些文件被命名为:“bleachxx.mp4”,其中 xx 是相对于整个系列的剧集编号,而不是相对于季节的剧集编号。因此,“bleach21.mp4”是第二季的第一集,也是第 21 集。但是,文件本身被分成自己的季节文件夹。

问题在于,该命令会将所有文件重命名为“Bleach S0XExx”,但由于文件具有总文件编号,bleach52.mp4 --> 'Bleach S03E52.mp4',而第 3 季显然没有 52 集。

为了解决这个问题,我必须用总数减去前几季的集数,才能得到具体的季数。

例如:如果第 1 季有 20 集,那么 25-20=5,因此第 25 集是第 2 季的第 5 集,重命名将正常进行。

我是编码方面的新手,我建议使用 Python 脚本,因为我听说这是解决这个问题的有效方法。有人能帮我一步一步编写这个脚本吗?谢谢!

答案1

这是最容易想到的,但请尝试:

# call program as: epirename.py /path/to/mp4files 20 41 59
# the numbers are the sequence of first episodes in each season after the first
import os
import re
import sys
mp4dir = sys.argv[1]
seasons = [int(startnum) for startnum in sys.argv[2:]]
seasons.insert(0, 0) # start with '0' as the first episode of season 1
season = 0
patt = re.compile(r'([[:alpha:]]+)([[:digit:]]+).mp4')
for filename in sorted(os.listdir(mp4dir)):
    match = patt.search(filename)
    if match:
        episode = int(match.group(2))
        try:
            if episode >= seasons[season+1]:
                season += 1
        except:
            pass
        # create new filename as '{basename}S{season}E{episode}'
        newname = '%sS%02dE%03d.mp4' % (match.group(1), season+1, episode - seasons[season])
        os.rename(os.path.join(dir, filename),
                  os.path.join(dir, newname))
        print 'renamed', filename 'to', newname

结果是与 '{name}{epi}.mp4' 匹配的文件将被重命名为 '{name}S{season}E{episode}.mp4'。其他文件保持不变。

再说一遍,这只是我突然想到的;可能有更有效的技术。

相关内容