17.7 Zugriff auf das Dateisystem – shutil 

Das Modul shutil ist als Ergänzung zu os und os.path anzusehen und definiert abstrakte Funktionen, die insbesondere das Kopieren und Entfernen von Dateien betreffen, ohne dass man die dazu erforderlichen plattformabhängigen Programme wie beispielsweise copy unter Windows oder cp auf Unix-Maschinen kennen muss.
Folgende Funktionen werden von shutil implementiert, wobei die Parameter src und dst jeweils Strings sind, die den Pfad der Quell- bzw. der Zieldatei enthalten:
shutil.copyfile(src, dst)
Kopiert die Datei unter src nach dst. Wenn die Datei unter dst bereits existiert, wird sie überschrieben.
Dabei muss der Pfad dst schreibbar sein. Ansonsten wird ein IOError geworfen.
shutil.copyfileobj(fsrc, fdst[, length])
Kopiert den Inhalt des zum Lesen geöffneten Dateiobjekts fsrc in das zum Schreiben geöffnete fdst-Objekt.
Mit dem optionalen Parameter length kann dabei die zu verwendende Zwischenspeichergröße in Bytes angegeben werden. Ist length positiv, wird die fsrc portionsweise ausgelesen und nach fdst geschrieben, während bei negativem length zuerst der gesamte Inhalt von fsrc in den Speicher gelesen und dann in einem Rutsch nach fdst geschrieben wird. Standardmäßig wird ein positiver Wert für length verwendet, den das System wählt.
shutil.copymode(src, dst)
Kopiert die Zugriffsrechte vom Pfad src auf den Pfad dst. Dabei bleiben der Inhalt von dst sowie der Besitzer und die Gruppe unangetastet.
Beide Pfade müssen bereits im Dateisystem existieren.
shutil.copystat(src, dst)
Wie shutil.copymode, aber es werden zusätzlich die Zeiten für den letzten Zugriff in die letzte Modifikation kopiert.
shutil.copy(src, dst)
Kopiert die Datei unter dem Pfad src nach dst. Der Parameter dst kann dabei einen Pfad zu einer Datei enthalten, die dann erzeugt oder überschrieben wird. Verweist dst auf einen Ordner, wird eine neue Datei mit dem Dateinamen von src im Ordner dst erzeugt oder gegebenenfalls überschrieben.
Die Zugriffsrechte werden dabei mitkopiert.
shutil.copy2(src, dst)
Genau wie shutil.copy, aber es werden zusätzlich die Zeiten des letzten Zugriffs und der letzten Änderung kopiert.
shutil.copytree(src, dst[, symlinks])
Kopiert die gesamte Verzeichnisstruktur unter src nach dst. Der Pfad dst darf dabei nicht auf einen bereits existierenden Ordner verweisen, und es werden alle fehlenden Verzeichnisse des Pfads dst erzeugt.
Die Rechte der erzeugten Ordner und Dateien werden mittels shutil.copystat gesetzt, und Dateien werden mit shutil.copy2 kopiert.
Mit dem optionalen Parameter symlinks wird angegeben, wie mit symbolischen Links verfahren werden soll. Hat symlinks den Wert False oder wird symlinks nicht angegeben, werden die verlinkten Dateien oder Ordner selbst in die kopierte Verzeichnisstruktur eingefügt. Bei einem symlinks-Wert von True werden nur die Links kopiert.
shutil.rmtree(src[, ignore_errors[, onerror]])
Löscht die gesamte Verzeichnisstruktur unter src. Für ignore_errors kann ein Wahrheitswert übergeben werden, der angibt, ob beim Löschen auftretende Fehler ignoriert oder von der Funktion, die für onerror übergeben wurde, behandelt werden sollen. Wird ignore_errors nicht angegeben, ruft jeder auftretende Fehler eine Exception hervor.
Wenn Sie onerror angeben, muss es eine Funktion sein, die drei Parameter erwartet:
- function – eine Referenz auf die Funktion, die den Fehler verursacht hat. Dies können os.listdir, os.remove oder os.rmdir sein.
- path – der Pfad, für den der Fehler auftrat.
- Excinfo – der Rückgabewert von sys.exc_info im Kontext des Fehlers.
Achtung |
Exceptions, die von der Funktion onerror geworfen werden, werden nicht abgefangen. |
shutil.move(src, dst)
Verschiebt rekursiv die Datei oder den Ordner von src nach dst.