Crie um lote rename srcipt em python?

0

Em primeiro lugar, esta pergunta foi feita como um seguimento da minha pergunta anterior: Como renomear arquivos em lote com "variáveis"? . Eu estou apenas reafirmando isso considerando as recomendações do Sergey.

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

O problema é que o comando irá renomear todos os arquivos em "Bleach S0XExx", mas como os arquivos possuem os números de arquivos gerais, bleach52.mp4 - > 'Bleach S03E52.mp4' quando obviamente não há 52 episódios na terceira temporada.

Para resolver esse problema, eu teria que subtrair o número de episódios nas temporadas anteriores pelo número geral e, essencialmente, obter o número da temporada específica.

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

Sou um novato completo em codificação, acabei de sugerir um script python como 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!

    
por DeoxNa 27.10.2011 / 03:38

1 resposta

1

Isto está fora do topo da cabeça, 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 são deixados intactos.

Mais uma vez, isso está fora do topo da minha cabeça; pode haver técnicas mais eficientes.

    
por Arcege 28.10.2011 / 01:00