Antworten:
Verwendung os.rename:
import os
os.rename('a.txt', 'b.kml')
C:/folder/file.txtunter Windows oder /home/file.txtunter Linux / MacOS).
OSErrorauf Windows -Systemen jedoch fehlschlägt . os.path.existssollte 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.moveist keine gute Option, da es sich nicht um eine atomare Operation handelt. Wenn die Datei geöffnet ist, shutil.movewird beispielsweise eine Datei mit erstellt new_name, die Datei jedoch nicht gelöscht, old_namesodass Sie zwei Dateien erhalten. os.renameauf 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 PathObjekt 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_filein ä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 renameMethode 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))
pathlibBibliothek 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 formatMethode ü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.txtauf 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')
mvwie 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.pathmit modernem Stil pathlibist ziemlich zweifelhaft. Gehen Sie pathlibstattdessen 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+