在Python中建立批次重命名srcipt?

在Python中建立批次重命名srcipt?

首先,這個問題是我之前問題的後續問題:如何用「變數」批次重命名檔案?。我只是考慮謝爾蓋的建議而重申。

我使用 xmbc 觀看電視節目。在我開始使用xmbc之前,我批量下載了《BLEACH》的前幾季。我能說什麼,我是動漫迷;-)。它們被命名為:“bleachxx.mp4”,其中 xx 是整個系列的集數,而不是季數。所以「bleach21.mp4」是第二季的第一集,也是第 21 集。然而,文件本身被分成自己的季節資料夾。

問題是,該命令將所有檔案重新命名為“Bleach S0XExx”,但因為這些檔案具有總體檔案編號,bleach52.mp4 -->“Bleach S03E52.mp4”,而第三季顯然沒有 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」。其他文件保持不變。

再說一遍,這不是我的想法;可能有更有效的技術。

相關內容