HOWTO · Python
Wie man eine Datei in Python kopiert
Python bietet eingebaute Funktionen zum Kopieren von Dateien mit dem Dienstprogramm des Betriebssystems Shell. Die Methode shutil copyfile() kopiert das Quellmaterial nur dann auf den Empfänger, wenn das Ziel geschrieben werden konnte. Die Methode `copy()` erzeugt darin eine neue Datei mit dem gleichen Namen wie die Quelldatei, wenn das Ziel ein Ordner ist.
Auf dieser Seite
Python wird mit mehreren Out-of-Box-Modulen zur Unterstützung von Datei-E/A-Operationen (wie OS, subprocess und shutil) ausgeliefert. Sie werden einfach Dateien und Verzeichnisse mit Hilfe des shutil-Moduls kopieren. Operationen wie das Duplizieren, Übertragen oder Löschen von Dateien und Verzeichnissen werden mit dieser Utility-Funktion abgeschlossen. Hier werden vier Methoden wie folgt besprochen.
Shutil copyfile() Methode zum Kopieren von Dateien in Python
Es kopiert das Quellmaterial in eine Datei mit dem Zielnamen. Wenn das Ziel nicht beschreibbar ist, tritt während des Kopiervorgangs eine IOError-Ausnahme auf. Wenn die Ursprungs- und die Zieldatei gleich sind, kehrt SameFileError zurück. Die Pfadnamen der Quell- und Zieldatei werden als Zeichenketten angegeben.
copyfile(source_file, destination_file)
Zeichen- oder Blockgeräte und die Pipes werden von dieser Methode nicht unterstützt.
import shutil
source = r"C:\Users\DelftStack\Documents\test\test.txt"
destination = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copyfile(source, destination)
Shutil copy() Methode zum Kopieren von Dateien mit Berechtigungen
Die copy() Methode funktioniert wie der Unix-Befehl cp. Beim Kopieren seines Inhalts synchronisiert diese Methode die Berechtigungen der Zieldatei mit der Quelldatei. Wenn Sie die gleiche Datei kopieren, wird auch der SameFileError ausgegeben. Seine Syntax lautet wie folgt.
shutil.copy(src_file, dest_file, *, follow_symlinks=True)
Beispiel für Shutil copy() Methode zum Kopieren von Dateien mit Berechtigungen
import shutil
src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy(src, des)
Vergleich zwischen copy() und copyfile() Methode
- Die Methode
copy()setzt oft die Dateierlaubnis, wenn der Inhalt kopiert wird, während die Methodecopyfile()nur die Daten kopiert. - Im wesentlichen verwendet die Methode
copyfile()in ihrer Implementierung die Methodecopyfileobj(). Im Vergleich dazu verwendet die Methodecopy()die Funktionencopyfile()undcopymode(). - Der obige Punkt macht deutlich, daß
copyfile()etwas schneller sein wird alscopy(), weil bei letzterem eine zusätzliche Aufgabe ansteht (Erhaltung der Berechtigungen).
copyfileobj() Methode zum Kopieren von Dateiobjekten
Diese Funktion kopiert die Datei in das Objekt des Zielpfades oder der Zieldatei. Wenn das Zielobjekt ein Dateiobjekt ist, müssen Sie es nach dem direkten Aufruf von copyfileobj() schließen. Die Puffergröße wird verwendet, um die Länge des Puffers anzugeben. Sie ist die Anzahl der Bytes, die während des Kopiervorgangs im Speicher gehalten werden.
Die Syntax der copyfileobj() Methode ist nachfolgend beschrieben.
shutil.copyfileobj(src_file_object, dest_file_object[, length])
import shutil
filename1 = r"C:\Users\DelftStack\Documents\test\test.txt"
fileA = open(filename1, "rb")
filename2 = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
fileB = open(filename2, "wb")
shutil.copyfileobj(fileA, fileB)
copy2() Methode zur Erhaltung von Metadaten
Die copy2() Methode ist ähnlich der copy() Methode, aber zusätzlich zum Kopieren des Dateiinhalts werden auch alle Metadaten der Quelldatei erhalten.
shutil.copy2(src_file, dest_file, *, follow_symlinks=True)
import shutil
src = r"C:\Users\DelftStack\Documents\test\test.txt"
des = r"C:\Users\DelftStack\Pictures\test2\test2.txt"
shutil.copy2(src, des)
Schlussfolgerung der Methoden zum Kopieren einer Datei in Python
Am Ende wird eine Tabelle für alle Methoden beigefügt, die dazu beiträgt, den Nutzen von shutil besser zu verstehen.
| Funktion | kopiert Metadaten | Genehmigungen für Kopien | kann Puffer verwenden | Ziel kann Verzeichnis sein |
|---|---|---|---|---|
shutil.copy |
Nein | Ja | Nein | Ja |
shutil.copyfile |
Nein | Nein | Nein | Nein |
shutil.copy2 |
Ja | Ja | Nein | Ja |
shutil.copyfileobj |
Nein | Nein | Ja | Nein |