batch-umbenennen von 100K-Dateien mit python
Ich habe einen Ordner mit über 100.000 Dateien, alle nummeriert mit den gleichen Stummel, aber ohne führende Nullen und die zahlen sind nicht immer zusammenhängend (Sie sind in der Regel, aber es gibt Lücken) e.g:
file-21.png,
file-22.png,
file-640.png,
file-641.png,
file-642.png,
file-645.png,
file-2130.png,
file-2131.png,
file-3012.png,
etc.
Ich würde gerne batch-Prozess erstellen gepolsterte, zusammenhängenden Dateien. e.g:
file-000000.png,
file-000001.png,
file-000002.png,
file-000003.png,
Wenn ich parse den Ordner mit for filename in os.listdir('.'):
die Dateien nicht in der Reihenfolge möchte ich Ihnen an. Verständlicherweise kommen Sie
file-1,
file-1x,
file-1xx,
file-1xxx,
etc. dann
file-2,
file-2x,
file-2xx,
etc. Wie kann ich es bekommen, um durch zu gehen in der Reihenfolge der numerische Wert? Ich bin ein absoluter python noob, aber ein Blick in die docs, die ich vermute, könnte ich die Karte verwenden, um eine neue Liste erstellen, filtern Sie nur den numerischen Teil, und Sortieren Sie anschließend die Liste, iteriere das? Mit über 100K Dateien könnte dies schwer. Irgendwelche Tipps sind willkommen!
- Sie können ein linux-Kommando "ls" mit einer beliebigen Anzahl von Parametern zu Sortieren, wie Sie wollen... und dann diese Liste verwenden, um auf die Dateien.
- Ja, wenn ich das machen würde, würde ich nur verwenden
sort -n
. - Anstelle der Bearbeitung Ihrer Frage mit der Antwort, ist es besser, einfach posten Sie Ihre Lösung als seine eigene Antwort unten, und markieren Sie Sie als angenommen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Nun haben Sie die Dateien in der Reihenfolge, die Sie wollen, und kann Schleife
mithilfe der fortlaufenden Nummer
i
(die 0, 1, 2, ...) gepolsterte, wie Sie möchten in den Ziel-Namen.Gibt es drei Schritte. Die erste ist, dass alle Dateinamen. Die zweite ist die Umwandlung der Dateinamen. Die Dritte ist die Umbenennung.
Wenn alle Dateien sind im gleichen Ordner, dann glob funktionieren sollte.
Nächste, Sie möchten, ändern Sie den Namen der Datei. Sie können drucken, die mit Polsterung, dies zu tun.
Nun, dazu müssen Sie Sie alle.
os.rename
genau das tut.Um es zusammen zu fassen:
Danke Euch allen für Eure Anregungen, ich werde versuchen, Sie alle zu lernen die unterschiedlichen Ansätze. Die Lösung, die ich ging für die Nutzung basiert auf einem natürlichen Art auf meine filelist und dann Durchlaufen, die zu benennen. Dies war eine der vorgeschlagen Antworten, aber aus irgendeinem Grund ist jetzt verschwunden, so kann ich nicht markieren Sie ihn als akzeptiert!
wo natsort definiert ist, in http://code.activestate.com/recipes/285264-natural-string-sorting/
Warum gehst du nicht tun es in einer zwei-Schritt-Prozess. Analysieren Sie alle Dateien und benennen Sie mit gepolsterten zahlen und dann ein anderes Skript ausführen lassen, das nimmt die Dateien, die sortiert jetzt richtig, und benennt Sie so, Sie sind zusammenhängend?
1) Nehmen Sie die Nummer in den Dateinamen.
2) Linken-pad mit Nullen
3) Speichern Sie Namen.
Hoffe, das hilft