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

655voto

Messa Punkte 22748

Verwenden Sie os.rename(src, dst) um eine Datei oder ein Verzeichnis umzubenennen oder zu verschieben.

$ ls
cheese_cheese_type.bar  cheese_cheese_type.foo
$ python
>>> import os
>>> for filename in os.listdir("."):
...  if filename.startswith("cheese_"):
...    os.rename(filename, filename[7:])
... 
>>> 
$ ls
cheese_type.bar  cheese_type.foo

6 Stimmen

Ich erhalte eine Fehlermeldung von Windows, die besagt, dass es die Datei nicht finden kann, und es tut nichts... irgendwelche Tipps?

5 Stimmen

@Jeff Ich fand es viel einfacher, das Skript zu speichern und es in dem Verzeichnis abzulegen, in dem ich es ausführen wollte. Auf diese Weise funktioniert die os.rename-Methode korrekt. Der Nachteil ist, dass man am Ende das Skript selbst umbenennen könnte. Statt der Verwendung von . als das Verzeichnis, könnten Sie eine Variable namens dir und verwenden Sie diese, dann fügen Sie dir zum filename .

18 Stimmen

Sie erhalten die Meldung "Datei kann nicht gefunden werden", weil der Dateiname nicht der absolute Pfad ist. Rufen Sie explizit path und os.path.join(path, filename) auf, bevor Sie die Umbenennung aufrufen, und es wird funktionieren.

40voto

bukzor Punkte 36052

Hier ist ein Skript, das auf Ihrem letzten Kommentar basiert.

#!/usr/bin/env python
from os import rename, listdir

badprefix = "cheese_"
fnames = listdir('.')

for fname in fnames:
    if fname.startswith(badprefix*2):
        rename(fname, fname.replace(badprefix, '', 1))

25voto

Yogeesh Seralathan Punkte 1296

Der folgende Code sollte funktionieren. Er nimmt jeden Dateinamen im aktuellen Verzeichnis, wenn der Dateiname das Muster CHEESE_CHEESE_ dann wird er umbenannt. Andernfalls wird der Dateiname nicht geändert.

import os
for fileName in os.listdir("."):
    os.rename(fileName, fileName.replace("CHEESE_CHEESE_", "CHEESE_"))

17voto

darelf Punkte 4339

Unter der Annahme, dass Sie sich bereits im Verzeichnis befinden und dass die "ersten 8 Zeichen" aus Ihrem Kommentar immer zutreffen. (Obwohl "CHEESE_" aus 7 Zeichen besteht... ? Wenn ja, ändern Sie die 8 unten in 7)

from glob import glob
from os import rename
for fname in glob('*.prj'):
    rename(fname, fname[8:])

11voto

Aziz Alto Punkte 16611

Ich habe das gleiche Problem, bei dem ich den weißen Raum ersetzen möchte in jeder pdf-Datei zu einem Bindestrich - . Aber die Dateien befanden sich in mehreren Unterverzeichnissen. Also musste ich os.walk() . In Ihrem Fall für mehrere Unterverzeichnisse könnte es etwa so aussehen:

import os
for dpath, dnames, fnames in os.walk('/path/to/directory'):
    for f in fnames:
        os.chdir(dpath)
        if f.startswith('cheese_'):
            os.rename(f, f.replace('cheese_', ''))

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