Во-первых, этот вопрос был задан в продолжение моего предыдущего вопроса: Как пакетно переименовать файлы с «переменными»? . Я просто повторяю это, учитывая рекомендации Сергея.
Я использую 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, поскольку мне сказали, что это эффективный способ решения этой проблемы. Может кто-нибудь помочь мне в пошаговом процессе написания этого сценария? Спасибо!
Это от макушки, но попытки:
# 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'. Другие файлы оставляют нетронутыми.
Снова, это первое, что пришло на ум; могут быть более эффективные методы.