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

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

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

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

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

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

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

Я полный новичок в кодировании, я просто предложил скрипт на 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'. Остальные файлы остаются нетронутыми.

Опять же, это только навскидку; возможно, есть более эффективные методы.

Связанный контент