Criar um script de renomeação em lote em python?

Criar um script de renomeação em lote em python?

Em primeiro lugar, esta pergunta foi feita como uma continuação da minha pergunta anterior:Como renomear arquivos em lote com “variáveis”?. Estou apenas reafirmando, considerando as recomendações de Sergey.

Eu uso o xmbc para ver meus programas de TV. Antes de começar a usar o xmbc, baixei em lote as primeiras temporadas de “Bleach”. O que posso dizer, sou fã de anime ;-). Eles são nomeados: "bleachxx.mp4" onde xx é o número do episódio referente a toda a série, não à temporada. então "bleach21.mp4" é o primeiro episódio da segunda temporada e o 21º no geral. Os próprios arquivos são, no entanto, divididos em suas próprias pastas de temporada.

O problema é que o comando renomeará todos os arquivos para “Bleach S0XExx”, mas como os arquivos têm os números gerais dos arquivos, Bleach52.mp4 -> ‘Bleach S03E52.mp4’ quando obviamente não há 52 episódios na 3ª temporada.

Para resolver este problema, eu teria que subtrair o número de episódios das temporadas anteriores pelo número total e, essencialmente, obter o número específico da temporada.

Exemplo: se houver 20 episódios na 1ª temporada, então 25-20=5, então o 25º episódio é o 5º da 2ª temporada e a renomeação ocorreria normalmente.

Sou um completo novato em codificação, apenas sugeri um script python, pois me disseram que essa era uma maneira eficaz de resolver esse problema. Alguém pode me ajudar no processo passo a passo de escrever este script? Obrigado!

Responder1

Isso está fora de questão, mas tente:

# 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

O resultado é que os arquivos que correspondem a '{name}{epi}.mp4' serão renomeados para '{name}S{season}E{episode}.mp4'. Outros arquivos permanecem intactos.

Novamente, isso está fora da minha cabeça; pode haver técnicas mais eficientes.

informação relacionada