Ein Batch-Umbenennungsskript in Python erstellen?

Ein Batch-Umbenennungsskript in Python erstellen?

Erstens ist diese Frage eine Folgefrage zu meiner vorherigen Frage:Wie kann man Dateien mit „Variablen“ stapelweise umbenennen?. Ich wiederhole es nur unter Berücksichtigung der Empfehlungen von Sergey.

Ich verwende xmbc, um meine Fernsehsendungen anzusehen. Bevor ich xmbc verwendet habe, habe ich die ersten Staffeln von „Bleach“ im Batch-Verfahren heruntergeladen. Was soll ich sagen, ich bin ein Anime-Fan ;-). Diese heißen: „bleachxx.mp4“, wobei xx die Episodennummer der gesamten Serie ist, nicht die der Staffel. „bleach21.mp4“ ist also die 1. Episode der zweiten Staffel und die 21. insgesamt. Die Dateien selbst sind jedoch in eigene Staffelordner unterteilt.

Das Problem besteht darin, dass der Befehl alle Dateien in „Bleach S0XExx“ umbenennt, die Dateien jedoch die Gesamtdateinummern „bleach52.mp4 --> ‚Bleach S03E52.mp4‘“ haben, obwohl Staffel 3 offensichtlich keine 52 Episoden umfasst.

Um dieses Problem zu lösen, müsste ich die Anzahl der Episoden der vorherigen Staffeln von der Gesamtzahl abziehen und erhalte im Wesentlichen die spezifische Staffelnummer.

Beispiel: Wenn Staffel 1 20 Episoden hat, ist 25-20=5. Die 25. Episode ist also die 5. von Staffel 2 und die Umbenennung wird wie gewohnt durchgeführt.

Ich bin ein absoluter Neuling in Sachen Programmierung und habe nur ein Python-Skript vorgeschlagen, da mir gesagt wurde, dass dies eine effektive Möglichkeit zur Lösung dieses Problems sei. Kann mir bitte jemand Schritt für Schritt beim Schreiben dieses Skripts helfen? Danke!

Antwort1

Das fällt mir spontan ein, aber versuchen Sie es mal mit:

# 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

Das Ergebnis ist, dass die Dateien, die mit „{name}{epi}.mp4“ übereinstimmen, in „{name}S{season}E{episode}.mp4“ umbenannt werden. Andere Dateien bleiben unverändert.

Auch das ist nur meine spontane Idee; es gibt möglicherweise wirksamere Techniken.

verwandte Informationen