- Umbenennen in der Masse mit dem os-Modul und glob-Modul.
- Abrufen der Dateiliste mit dem glob-Modul
- Umbenennen mit os.rename()
- Erzeugen von mit Nullen gefüllten fortlaufenden Zahlen mit str.format()
- Beispiel für einen Code zum Hinzufügen einer fortlaufenden Nummer vor einer Datei
- Beispiel für einen Code zum Hinzufügen einer fortlaufenden Nummer nach einer Datei
Umbenennen in der Masse mit dem os-Modul und glob-Modul.
Verwenden Sie das os-Modul und das glob-Modul, um die Dateinamen in einem Ordner in großen Mengen zu ändern und umzubenennen, indem Sie Zeichenketten oder fortlaufende Nummern vor und nach den Dateinamen hinzufügen.
Beispiel einer Dateistruktur
Nehmen Sie die folgende Dateistruktur als Beispiel. In diesem Fall wird davon ausgegangen, dass sich nur Dateien (keine Ordner) in dem Ordner befinden.
. └── testdir ├── a.jpg ├── b.jpg ├── c.jpg ├── d.jpg └── e.jpg
Zu beachtende Dinge
Da der Vorgang eine Umbenennung der Datei beinhaltet, sollten Sie die Originaldatei separat speichern, damit sie im Falle eines Fehlers gesichert werden kann.
Abrufen der Dateiliste mit dem glob-Modul
Das glob-Modul findet alle Pfadnamen, die mit dem angegebenen Muster übereinstimmen, gemäß den von der Unix-Shell verwendeten Regeln.
glob — Unix style pathname pattern expansion — Python 3.10.0 Documentation
Die folgende Funktion kann zum Beispiel verwendet werden, um eine Liste der Datei- und Verzeichnisnamen im aktuellen Verzeichnis zu erhalten.glob.glob('./*')
Das Argument kann ein absoluter Pfad oder ein relativer Pfad sein.
In diesem Beispiel würde es wie folgt aussehen.
import glob print(glob.glob('./testdir/*')) # => ['./testdir/a.jpg', './testdir/b.jpg', './testdir/c.jpg', './testdir/d.jpg', './testdir/e.jpg']
Anstelle von a.jpg können Sie folgendes erhalten, wobei das Argument path hinzugefügt wird../testdir/a.jpg
Sie können auch Platzhalter (*) verwenden, um nur bestimmte Erweiterungen zu erhalten, wie unten gezeigt.glob.glob('./testdir/*.jpg')
Der folgende Mustervergleich kann verwendet werden.
*
: Passt zu allem.?
Passt auf jedes einzelne Zeichen.[abc]
: Entspricht einem einzelnen Zeichen aus a, b oder c.[!abc]
: Passt auf ein einzelnes Zeichen, das nicht a, b oder c ist
Umbenennen mit os.rename()
os.rename(src, dst, *, src_dir_fd=None, dst_dir_fd=None)
Benennen Sie die Datei oder das Verzeichnis src in dst um.
os — Miscellaneous operating system interfaces — Python 3.10.0 Documentation
Benutzen Sie die Funktion rename() des os-Moduls, die es umbenennt, wie der Name schon sagt.
import os os.rename('./testdir/a.jpg', './testdir/a_000.jpg')
Dann wird a.jpg in a_000.jpg umbenannt.
Erzeugen von mit Nullen gefüllten fortlaufenden Zahlen mit str.format()
Wenn wir zum Beispiel Dutzenden von Dateien fortlaufende Nummern hinzufügen, wollen wir “00” oder “11” anstelle von “0” oder “1” verwenden. Wenn Sie die Nullen auf diese Weise einfügen möchten, verwenden Sie die Methode str.format().
str.format(args,*kwargs)
Führt Operationen zur Formatierung von Zeichenketten durch. Die Zeichenfolge, die diese Methode aufruft, kann normale Zeichen oder durch {} getrennte Ersetzungsfelder enthalten.Built-in Types — Python 3.10.0 Documentation
Syntax von Formatierungszeichenfolgen
Die Formatierungszeichenfolge enthält das in geschweiften Klammern {} eingeschlossene “Ersatzfeld”.Die Syntax des Ersetzungsfeldes lautet wie folgt:
replacement_field ::= "{" [field_name] ["!" conversion] [":" format_spec] "}"
Vereinfacht ausgedrückt, beginnt das Ersetzungsfeld mit field_name, was dazu führt, dass der Wert des angegebenen Objekts formatiert und anstelle des Ersetzungsfeldes in die Ausgabe eingefügt wird. Nach dem field_name kann dem Konvertierungsfeld ein Ausrufezeichen '! folgen. Nach dem field_name kann dem Konvertierungsfeld ein Ausrufezeichen '! folgen. Die format_spec kann mit einem Doppelpunkt ':' am Ende geschrieben werden. Dies gibt das nicht standardmäßige Format des zu ersetzenden Wertes an.
string — Common string operations — Python 3.10.0 Documentation
Wenn Sie ihn vorerst mit 0 füllen wollen, gehen Sie wie folgt vor.
# 3を2桁でゼロ埋め print('{0:02d}'.format(3)) # => 03 # Fill in the zeros with three and four digits for 4 and 6, respectively. print('{0:03d}, {1:04d}'.format(4, 6)) # => 004, 0006
Beispiel für einen Code zum Hinzufügen einer fortlaufenden Nummer vor einer Datei
Ermitteln Sie zunächst den Dateinamen mit os.path.basename(). Fügen Sie dann eine Zeichenkette oder eine fortlaufende Nummer vor dem Dateinamen ein und verbinden Sie diese mit dem ursprünglichen Pfad mit os.path.join().
Im folgenden Beispiel wird allen Dateinamen img_ vorangestellt.
import os import glob path = "./testdir" files = glob.glob(path + '/*') for f in files: os.rename(f, os.path.join(path, 'img_' + os.path.basename(f)))
Das Ergebnis ist wie folgt.
. └── testdir ├── img_a.jpg ├── img_b.jpg ├── img_c.jpg ├── img_d.jpg └── img_e.jpg
Wenn Sie fortlaufende Nummern hinzufügen möchten, ändern Sie die for-Anweisung in etwas wie dieses: enumerate(), um die Nummern in der Reihenfolge von 0 an zu erhalten. In diesem Fall wird die Nummer mit drei Ziffern gefüllt.
for i, f in enumerate(files): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Hier ist das Ergebnis.
. └── testdir ├── 000_a.jpg ├── 001_b.jpg ├── 002_c.jpg ├── 003_d.jpg └── 004_e.jpg
Wenn Sie mit 1 anstelle von 0 beginnen wollen, setzen Sie das zweite Argument von enumerate auf 1.
for i, f in enumerate(files, 1): os.rename(f, os.path.join(path, '{0:03d}'.format(i) + '_' + os.path.basename(f)))
Das geht so.
. └── testdir ├── 001_a.jpg ├── 002_b.jpg ├── 003_c.jpg ├── 004_d.jpg └── 005_e.jpg
Beispiel für einen Code zum Hinzufügen einer fortlaufenden Nummer nach einer Datei
Verwenden Sie os.path.splitext(), um die Datei in Erweiterung und Stammpfad aufzuteilen, und fügen Sie dann Zeichenketten oder fortlaufende Nummern an den Stammpfad an. Im folgenden Beispiel wird _img nach allen Dateinamen hinzugefügt.
import os import glob files = glob.glob('./testdir/*') for f in files: ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_img' + fext)
Das Ergebnis ist folgendes.
. └── testdir ├── a_img.jpg ├── b_img.jpg ├── c_img.jpg ├── d_img.jpg └── e_img.jpg
Wie beim Hinzufügen einer fortlaufenden Nummer vor einer Datei muss auch beim Hinzufügen einer fortlaufenden Nummer die for-Anweisung geändert werden.
for i, f in enumerate(files): ftitle, fext = os.path.splitext(f) os.rename(f, ftitle + '_' + '{0:03d}'.format(i) + fext)
. └── testdir ├── a_000.jpg ├── b_001.jpg ├── c_002.jpg ├── d_003.jpg └── e_004.jpg