Создать сценарий пакетного переименования в Python?

Во-первых, этот вопрос был задан в продолжение моего предыдущего вопроса: Как пакетно переименовать файлы с «переменными»? . Я просто повторяю это, учитывая рекомендации Сергея.

Я использую xmbc для просмотра своих ТВ-шоу. Прежде чем я начал использовать xmbc, я скачал первые несколько сезонов "Bleach". Что я могу сказать, я фанат аниме ;-). Они называются: "bleachxx.mp4", где xx - номер эпизода в отношении всей серии, а не сезона. поэтому "bleach21.mp4" является 1-м эпизодом второго сезона и 21-м в целом. Сами файлы, однако, разделены на собственные папки сезона.

Проблема в том, что команда переименует все файлы в «Bleach S0XExx», но поскольку файлы имеют общие номера файлов, bleach52.mp4 -> «Bleach S03E52.mp4», когда, очевидно, нет 52 эпизодов 3 сезон.

Чтобы решить эту проблему, мне пришлось бы вычесть количество эпизодов в предыдущих сезонах из общего числа и, по сути, получить конкретный номер сезона.

Пример: если в 1-м сезоне 20 эпизодов, то 25–20 = 5, поэтому 25-й эпизод является 5-м в 2-м сезоне, и переименование будет выполняться как обычно.

Я - полный новичок в коде, я просто предложил скрипт на python, поскольку мне сказали, что это эффективный способ решения этой проблемы. Может кто-нибудь помочь мне в пошаговом процессе написания этого сценария? Спасибо!

0
задан 13 April 2017 в 15:24

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

Результат состоит в том, что файлы, которые соответствуют '{называют} {эпитаксиальный слой} .mp4', будет переименован для '{называния} S {сезон} E {эпизод} .mp4'. Другие файлы оставляют нетронутыми.

Снова, это первое, что пришло на ум; могут быть более эффективные методы.

0
ответ дан 13 April 2017 в 15:24

Другие вопросы по тегам:

Похожие вопросы: