Antworten:
Verwendung os.rename
:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txt
unter Windows oder /home/file.txt
unter Linux / MacOS).
OSError
auf Windows -Systemen jedoch fehlschlägt . os.path.exists
sollte verwendet werden, um vor dem Umbenennen zu überprüfen, ob das Ziel vorhanden ist. Dies führt zwar zu einem Fehler "Time Of Check to Time Of Use", es ist jedoch unwahrscheinlich, dass Probleme auftreten. (Ich kenne keinen einfachen Weg, um das zu
os.replace
Die Datei befindet sich möglicherweise in einem Verzeichnis. Geben Sie in diesem Fall den Pfad an:
import os
old_file = os.path.join("directory", "a.txt")
new_file = os.path.join("directory", "b.kml")
os.rename(old_file, new_file)
import shutil
shutil.move('a.txt', 'b.kml')
Dies funktioniert, um eine Datei umzubenennen oder zu verschieben.
shutil.move
ist keine gute Option, da es sich nicht um eine atomare Operation handelt. Wenn die Datei geöffnet ist, shutil.move
wird beispielsweise eine Datei mit erstellt new_name
, die Datei jedoch nicht gelöscht, old_name
sodass Sie zwei Dateien erhalten. os.rename
auf der anderen Seite wird nichts tun, was eine bessere Option ist . Mit shutil.move
, auch wenn Sie den Fehler erwischt, würden Sie immer noch Sorgen machen über die Überprüfung und das Löschen der Rogue - Datei. Nur nicht wert, wenn es ein besseres Werkzeug gibt :os.rename
.
Ab Python 3.4 kann man das pathlib- Modul verwenden, um dies zu lösen.
Wenn Sie auf einer älteren Version geschehen sein, können Sie die zurückportierte Version verwenden gefunden hier
Nehmen wir an, Sie befinden sich nicht im Stammpfad (nur um ein wenig Schwierigkeit hinzuzufügen), den Sie umbenennen möchten, und müssen einen vollständigen Pfad angeben. Wir können uns Folgendes ansehen:
some_path = 'a/b/c/the_file.extension'
So können Sie Ihren Weg nehmen und daraus ein Path
Objekt erstellen :
from pathlib import Path
p = Path(some_path)
Um einige Informationen zu diesem Objekt bereitzustellen, das wir jetzt haben, können wir Dinge daraus extrahieren. Wenn wir beispielsweise aus irgendeinem Grund die Datei umbenennen möchten, indem wir den Dateinamen von the_file
in ändern the_file_1
, können wir den Dateinamen-Teil abrufen:
name_without_extension = p.stem
Und halten Sie die Erweiterung auch noch in der Hand:
ext = p.suffix
Wir können unsere Modifikation mit einer einfachen String-Manipulation durchführen:
Python 3.6 und höher verwenden F-Strings!
new_file_name = f"{name_without_extension}_1"
Andernfalls:
new_file_name = "{}_{}".format(name_without_extension, 1)
Und jetzt können wir unsere Umbenennung durchführen, indem wir die rename
Methode für das von uns erstellte Pfadobjekt aufrufen und die anhängen ext
, um die gewünschte Umbenennungsstruktur zu vervollständigen:
p.rename(Path(p.parent, new_file_name + ext))
In Kürze, um seine Einfachheit zu demonstrieren:
Python 3.6+:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, f"{p.stem}_1_{p.suffix}"))
Versionen unter Python 3.6 verwenden stattdessen die String-Format-Methode:
from pathlib import Path
p = Path(some_path)
p.rename(Path(p.parent, "{}_{}_{}".format(p.stem, 1, p.suffix))
pathlib
Bibliothek in Python 3.4 eingeführt, sodass das Teilen der Antwort hier auch ein solides Modul zur Verfügung stellt, um seine Vielseitigkeit und Verwendung für kompliziertere Anforderungen zu demonstrieren.
{}
sind für die Formatierung von Zeichenfolgen, über die Sie hier lesen können . Letztendlich passiert, dass das {}
Get durch die Variablen ersetzt wird, die an die format
Methode übergeben werden. Das erste {}
wird also das enthalten, was drin ist name_without_extension
, und das zweite wird das zweite Argument enthalten, das einfach ist 1
.
os.rename(old, new)
Dies finden Sie in den Python-Dokumenten: http://docs.python.org/library/os.html
Verwenden Sie os.rename
. Sie müssen jedoch den vollständigen Pfad beider Dateien an die Funktion übergeben. Wenn ich eine Datei a.txt
auf meinem Desktop habe, werde ich das auch tun und ich muss auch voll umbenannte Datei geben.
os.rename('C:\\Users\\Desktop\\a.txt', 'C:\\Users\\Desktop\\b.kml')
import os
# Set the path
path = 'a\\b\\c'
# save current working directory
saved_cwd = os.getcwd()
# change your cwd to the directory which contains files
os.chdir(path)
os.rename('a.txt', 'b.klm')
# moving back to the directory you were in
os.chdir(saved_cwd)
chdir()
in ein Verzeichnis wechseln, z. B. was passiert unter Windows, wenn es sich um ein UNC handelt? Und a zu tun chdir()
hat Nebenwirkungen. Ich würde lieber nur die notwendigen Pfade os.rename()
direkt angeben , nein chdir()
ing.
Sie können os.system verwenden, um das Terminal aufzurufen, um die Aufgabe auszuführen:
os.system('mv oldfile newfile')
mv
wie ein in Unix integriertes Befehlszeilenprogramm zum Verschieben / Umbenennen einer Datei.
import os
import re
from pathlib import Path
for f in os.listdir(training_data_dir2):
for file in os.listdir( training_data_dir2 + '/' + f):
oldfile= Path(training_data_dir2 + '/' + f + '/' + file)
newfile = Path(training_data_dir2 + '/' + f + '/' + file[49:])
p=oldfile
p.rename(newfile)
os.path
mit modernem Stil pathlib
ist ziemlich zweifelhaft. Gehen Sie pathlib
stattdessen den ganzen Weg mit .
import shutil
import os
files = os.listdir("./pics/")
for key in range(0, len(files)):
print files[key]
shutil.move("./pics/" + files[key],"./pics/img" + str(key) + ".jpeg")
Das sollte es tun. Python 3+