419 Stimmen

Umbenennen mehrerer Dateien in einem Verzeichnis in Python

Ich versuche, einige Dateien in einem Verzeichnis mit Python umzubenennen.

Angenommen, ich habe eine Datei namens CHEESE_CHEESE_TYPE.*** und entfernen möchten CHEESE_ Der resultierende Dateiname wäre also CHEESE_TYPE

Ich versuche, die os.path.split aber es funktioniert nicht richtig. Ich habe auch in Erwägung gezogen, String-Manipulationen zu verwenden, aber auch damit war ich nicht erfolgreich.

1 Stimmen

Ihre Nadel ist nicht im Heuhaufen, Ihr Heuhaufen hat einen Platzhalter, und selbst wenn Sie den Fall ignorieren, kann Ihr Ergebnis nicht aus diesem Heuhaufen stammen. Könnten Sie die Frage ein wenig entschärfen?

1 Stimmen

Okay, ich werde versuchen, das so gut wie möglich zu klären. Ich habe einen Ordner mit Dateien, die alle so etwas wie cheese_cheese_type.prj heißen (alle haben die gleichen ersten 15 Zeichen, aber unterschiedliche 4 Zeichen am Ende und Erweiterungen). Ich versuche, die ersten 8 Zeichen aus dem Dateinamen zu entfernen (im Beispiel würde 'cheese_' entfernt und der resultierende Dateiname wäre cheese_type. prj Ich versuche also, das Verzeichnis zu durchsuchen, die Dateinamen zu teilen und die ersten 8 Zeichen aus dem Dateinamen zu entfernen. in wäre cheese_cheese_type.prj out wäre cheese_type.prj Danke!

0 Stimmen

Ähnlich, aber nicht gleichbedeutend mit Wie man eine Datei mit Python umbenennt

7voto

krs1 Punkte 1105

Versuchen Sie dies:

import os
import shutil

for file in os.listdir(dirpath):
    newfile = os.path.join(dirpath, file.split("_",1)[1])
    shutil.move(os.path.join(dirpath,file),newfile)

Ich gehe davon aus, dass Sie die Dateierweiterung nicht entfernen wollen, aber Sie können die gleiche Trennung auch mit Punkten vornehmen.

8 Stimmen

Das Überschreiben der eingebauten "Datei" ist generell eine schlechte Praxis.

2 Stimmen

@bukzor 7 Jahre später werde ich das noch weiter ausführen: "Das Überschreiben von Builtins ist generell eine schlechte Praxis."

6voto

Erik Kaplun Punkte 34929

Diese Art von Dingen ist perfekt für IPython geeignet, das über eine Shell-Integration verfügt.

In [1] files = !ls
In [2] for f in files:
           newname = process_filename(f)
           mv $f $newname

Hinweis: Um dies in einem Skript zu speichern, verwenden Sie die .ipy und stellen Sie allen Shell-Befehlen die Endung ! .

Siehe auch: http://ipython.org/ipython-doc/stable/interactive/shell.html

0 Stimmen

Welche Funktion hat jede Zeile?

5voto

nicholas Punkte 499

Hier ist eine allgemeinere Lösung:

Dieser Code kann verwendet werden, um ein bestimmtes Zeichen oder eine bestimmte Gruppe von Zeichen rekursiv aus allen Dateinamen innerhalb eines Verzeichnisses zu entfernen und sie durch ein anderes Zeichen, eine andere Gruppe von Zeichen oder kein Zeichen zu ersetzen.

import os

paths = (os.path.join(root, filename)
        for root, _, filenames in os.walk('C:\FolderName')
        for filename in filenames)

for path in paths:
    # the '#' in the example below will be replaced by the '-' in the filenames in the directory
    newname = path.replace('#', '-')
    if newname != path:
        os.rename(path, newname)

4voto

Uri Punkte 86472

Ihr Problem scheint eher in der Bestimmung des neuen Dateinamens zu liegen als in der Umbenennung selbst (wofür Sie die Methode os.rename verwenden könnten).

Aus Ihrer Frage geht nicht eindeutig hervor, welches Muster Sie umbenennen möchten. An der Manipulation von Zeichenketten ist nichts auszusetzen. Ein regulärer Ausdruck könnte das sein, was Sie hier brauchen.

4voto

Lloyd Punkte 7804

Mit diesem Befehl wird die anfänglich "CHEESE_"-String aus allen Dateien im aktuellen Verzeichnis, indem Sie renamer :

$ renamer --find "/^CHEESE_/" *

1 Stimmen

Npm (JavaScript) != python. Man könnte genauso gut einen Link zum Perl umbenennen Befehl.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X