Rheinwerk Computing < openbook >

 
Inhaltsverzeichnis
1 Einleitung
2 Die Programmiersprache Python
Teil I Einstieg in Python
3 Erste Schritte im interaktiven Modus
4 Der Weg zum ersten Programm
5 Kontrollstrukturen
6 Dateien
7 Das Laufzeitmodell
8 Funktionen, Methoden und Attribute
9 Informationsquellen zu Python
Teil II Datentypen
10 Das Nichts – NoneType
11 Operatoren
12 Numerische Datentypen
13 Sequenzielle Datentypen
14 Zuordnungen
15 Mengen
16 Collections
17 Datum und Zeit
18 Aufzählungstypen – Enum
Teil III Fortgeschrittene Programmiertechniken
19 Funktionen
20 Modularisierung
21 Objektorientierung
22 Ausnahmebehandlung
23 Iteratoren
24 Kontextobjekte
25 Manipulation von Funktionen und Methoden
Teil IV Die Standardbibliothek
26 Mathematik
27 Kryptografie
28 Reguläre Ausdrücke
29 Schnittstelle zu Betriebssystem und Laufzeitumgebung
30 Kommandozeilenparameter
31 Dateisystem
32 Parallele Programmierung
33 Datenspeicherung
34 Netzwerkkommunikation
35 Debugging und Qualitätssicherung
36 Dokumentation
Teil V Weiterführende Themen
37 Anbindung an andere Programmiersprachen
38 Distribution von Python-Projekten
39 Grafische Benutzeroberflächen
40 Python als serverseitige Programmiersprache im WWW – ein Einstieg in Django
41 Wissenschaftliches Rechnen
42 Insiderwissen
43 Von Python 2 nach Python 3
A Anhang
Stichwortverzeichnis

Download:
- Beispielprogramme, ca. 464 KB

Jetzt Buch bestellen
Ihre Meinung?

Spacer
<< zurück
Python 3 von Johannes Ernesti, Peter Kaiser
Das umfassende Handbuch
Buch: Python 3

Python 3
Pfeil 31 Dateisystem
Pfeil 31.1 Zugriff auf das Dateisystem mit os
Pfeil 31.2 Dateipfade – os.path
Pfeil 31.3 Zugriff auf das Dateisystem – shutil
Pfeil 31.3.1 Verzeichnis- und Dateioperationen
Pfeil 31.3.2 Archivoperationen
Pfeil 31.4 Temporäre Dateien – tempfile
 
Zum Seitenanfang

31.3    Zugriff auf das Dateisystem – shutil Zur vorigen ÜberschriftZur nächsten Überschrift

Das Modul shutil ist als Ergänzung zu os und os.path anzusehen und enthält Funktionen, die insbesondere das Kopieren und Entfernen von Dateien betreffen. Dabei wird von den plattformspezifischen Programmen wie beispielsweise copy unter Windows oder cp unter Unix abstrahiert.

Mit Python 3.2 sind außerdem Funktionen zum Erzeugen und Entpacken von Archivdateien (wie ZIP- oder TAR-Archiven) hinzugekommen.

Folgende Funktionen werden von shutil implementiert, wobei die Parameter src und dst jeweils Strings sind, die den Pfad der Quell- bzw. der Zieldatei enthalten:

Name Beschreibung
Verzeichnis- und Dateioperationen
chown(path, [user, group]) Setzt den Eigentümer und die Gruppe von path auf die übergebenen Werte user bzw. group.
copy(src, dst, [follow_symlinks]) Kopiert die Datei unter dem Pfad src nach dst. Im Unterschied zu copyfile kann dst dabei auch auf ein Verzeichnis verweisen, in das die Datei kopiert werden soll.
copyfile(src, dst, [follow_symlinks]) Kopiert die Datei unter src nach dst. Wenn die Datei unter dst bereits existiert, wird sie ohne Rückfrage überschrieben. Dabei muss der Pfad dst schreibbar sein. Ansonsten wird eine PermissionError-Exception geworfen.
copyfileobj(fsrc, fdst, [length]) Kopiert den Inhalt des zum Lesen geöffneten Dateiobjekts fsrc in das zum Schreiben geöffnete fdst-Objekt.
copymode(src, dst, [follow_symlinks]) 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.
copystat(src, dst, [follow_symlinks]) Wie copymode, aber es werden zusätzlich die Zeiten für den letzten Zugriff in die letzte Modifikation kopiert.
copy2(src, dst, [follow_symlinks]) Wie copy, aber es werden zusätzlich die Zeiten des letzten Zugriffs und der letzten Änderung kopiert.
copytree(src, dst, [symlinks ignore, copy_function, ignore_dangling_symlinks]) Kopiert die gesamte Verzeichnisstruktur unter src nach dst.
disk_usage(path) Gibt Informationen über die Speicherkapazität, Belegung und den freien Speicher unter path als Tupel zurück.
ignore_patterns([*patterns]) Erzeugt eine Funktion, die bei der copytree-Funktion für den Parameter ignore übergeben werden kann, um bestimmte Dateien vom Kopieren auszuschließen.
move(src, dst) Verschiebt die Datei oder den Ordner von src nach dst.
rmtree(src, [ignore_errors, onerror]) Löscht die gesamte Verzeichnisstruktur unter src.
which(cmd, [mode, path]) Gibt den Pfad der ausführbaren Datei zurück, die zum Kommando cmd gehört.
Archivoperationen
make_archive(base_name, format, [root_dir]) Erzeugt eine Archivdatei, in der Dateien im Verzeichnis root_dir enthalten sind, und gibt den Namen des Archivs zurück.
get_archive_formats() Gibt eine Liste der verfügbaren Archivformate zum Erzeugen von Archiven zurück.
get_unpack_formats() Gibt eine Liste verfügbarer Archivformate zum Entpacken von Archiven zurück.
unpack_archive(filename, [extract_dir, format]) Entpackt das Archiv unter filename in das Verzeichnis extract_dir.

Tabelle 31.5    Funktionen des Moduls shutil

Im Folgenden werden zunächst die Funktionen für Verzeichnisse und Dateien und danach die Archivoperationen im Detail besprochen. Um die aufgeführten Beispiele ausführen zu können, muss zunächst das Modul shutil eingebunden werden:

>>> import shutil
 
Zum Seitenanfang

31.3.1    Verzeichnis- und Dateioperationen Zur vorigen ÜberschriftZur nächsten Überschrift

copy(src, dst [follow_symlinks])

Diese Operation 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. Dies ist der wesentliche Unterschied zur Funktion copyfile, die keinen Ordner als Ziel akzeptiert.

Die Zugriffsrechte werden mitkopiert.

Hat der Parameter follow_symlinks den Wert False, werden symbolische Links selbst kopiert, während der Standardwert True dafür sorgt, dass anstelle eines symbolischen Links die davon referenzierte Datei kopiert wird.

copytree(src, dst, [symlinks, ignore, copy_function, ignore_dangling_symlinks])

Diese Operation 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 Pfades dst erzeugt.

Der optionale Parameter symlinks gibt an, 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. Falls symlinks den Wert False hat und der Parameter ignore_dangling_symlinks auf True gesetzt ist, werden Fehler ignoriert, die auftreten, falls ein symbolischer Link auf eine nicht vorhandene Datei zeigt.

Der Parameter ignore erwartet eine Funktion, die bestimmte Dateien vom Kopieren ausschließt. Die Funktion ignore_patterns dient dazu, eine solche Funktion zu erzeugen. Das folgende Beispiel erzeugt eine Funktion, mit der alle auf ".txt" endenden Dateinamen aussortiert werden. Außerdem werden Dateinamen ignoriert, die mit "tmp" beginnen.

>>> my_ignore_function = shutil.ignore_patterns("*.txt", "tmp*")

Für das Kopieren der Dateien wird die Funktion verwendet, die mit dem Parameter copy_function übergeben wird, wobei copy2 die Standardeinstellung ist.

Die Funktion copytree greift intern auf die Funktion copystat zurück, um die Rechte der erzeugten Verzeichnisse und Dateien zu setzen.

rmtree(src, [ignore_errors, onerror])

Hiermit wird die gesamte Verzeichnisstruktur unter src gelöscht. Für ignore_errors kann ein Wahrheitswert übergeben werden, der bestimmt, 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, erzeugt jeder auftretende Fehler eine Exception.

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
[»]  Hinweis

Exceptions, die von der Funktion onerror geworfen werden, werden nicht abgefangen.

 
Zum Seitenanfang

31.3.2    Archivoperationen Zur vorigen ÜberschriftZur nächsten Überschrift

Für die folgenden Tests gehen wir davon aus, dass sich im aktuellen Arbeitsverzeichnis ein Verzeichnis namens daten befindet, das aufgebaut ist wie in Abbildung 31.2 gezeigt.

Beispieldaten für die Archivfunktionen

Abbildung 31.2    Beispieldaten für die Archivfunktionen

make_archive(base_name, format, [root_dir, base_dir, verbose, dry_run, owner, group, logger])

Diese Funktion erzeugt ein neues Archiv, das die Dateien im Verzeichnis root_dir enthält. Wird root_dir nicht angegeben, werden die Dateien des aktuellen Arbeitsverzeichnisses gepackt. Mit dem Parameter base_name werden der Speicherort und der Name der Archivdatei festgelegt, wobei die Dateiendung nicht mit angegeben werden sollte.

Über den Parameter format wird das gewünschte Format der Archivdatei angegeben. Die verfügbaren Archivformate können Sie mit der Funktion get_archive_formats ermitteln (siehe unten).

Ein typischer Aufruf von make_archive sieht folgendermaßen aus:

>>> shutil.make_archive("test", "zip", "daten")
'[…]/test.zip'

Mithilfe des Unix-Programms unzip sehen wir, dass das Archiv alle Dateien im Verzeichnis daten enthält:

computer ~ $  unzip -v test.zip 
Archive: test.zip
Length Method Size Name
2 Defl:N 4 datei2.txt
2 Defl:N 4 datei3.txt
2 Defl:N 4 datei1.txt
2 Defl:N 4 unterordner1/datei5.txt
2 Defl:N 4 unterordner1/datei4.txt
2 Defl:N 4 unterordner2/datei6.txt
2 Defl:N 4 unterordner2/unterordner3/datei7.txt

Möchten Sie nur die Dateien eines Unterverzeichnisses von root_dir inklusive des zugehörigen relativen Pfades packen, können Sie dies mit dem Parameter base_dir erreichen.

Wir werden im folgenden Beispiel nur die Dateien im Unterverzeichnis unterordner2 packen, wobei jedoch der relative Pfad innerhalb des Verzeichnisses daten erhalten bleibt:

>>> shutil.make_archive("test2", "zip", "daten", "unterordner2") 
'[…]/test2.zip'

Wieder überprüfen wir mithilfe von unzip den Inhalt des Archivs:

computer ~ $  unzip -v test2.zip 
Archive: test2.zip
Length Method Size Name
2 Defl:N 4 unterordner2/datei6.txt
2 Defl:N 4 unterordner2/unterordner3/datei7.txt

Sie sehen, dass alle Dateien und Ordner im Verzeichnis unterordner2 gepackt worden sind, wobei der relative Pfad zum Verzeichnis daten, nämlich unterordner2, erhalten geblieben ist.

Für die technischen und selten gebrauchten Parameter verbose, dry_run, owner, group und logger verweisen wir Sie auf die Python-Dokumentation.

get_archive_formats()

Diese Funktion gibt eine Liste zweielementiger Tupel zurück, in denen die verfügbaren Formate zum Erstellen von Archiven beschrieben werden.

>>> shutil.get_archive_formats()
[('bztar', "bzip2'ed tar-file"),
('gztar', "gzip'ed tar-file"),
('tar', 'uncompressed tar file'),
('xztar', "xz'ed tar-file"),
('zip', 'ZIP file')]

Jedes Tupel in dieser Liste enthält zwei Strings: den Namen des Formats und eine kurze Beschreibung.

get_unpack_formats()

Diese Funktion arbeitet wie get_archive_formats, nur werden hier die verfügbaren Formate zum Entpacken von Archiven aufgelistet.

unpack_archive(filename, [extract_dir, format])

Diese Funktion entpackt das Archiv unter dem Pfad filename in das Zielverzeichnis extract_dir. Wird extract_dir nicht angegeben, werden die Daten in das aktuelle Arbeitsverzeichnis entpackt.

Mit dem Parameter format kann das Format des Archivs angegeben werden. Falls kein Wert für format übergeben wurde, versucht unpack_archive, das Format des Archivs anhand der Dateiendung zu ermitteln.

 


Ihre Meinung

Wie hat Ihnen das Openbook gefallen? Wir freuen uns immer über Ihre Rückmeldung. Schreiben Sie uns gerne Ihr Feedback als E-Mail an kommunikation@rheinwerk-verlag.de.

<< zurück
 Zum Rheinwerk-Shop
Zum Rheinwerk-Shop: Python 3 Python 3
Jetzt Buch bestellen

 Buchempfehlungen
Zum Rheinwerk-Shop: Einstieg in Python
Einstieg in Python


Zum Rheinwerk-Shop: Python. Der Grundkurs
Python. Der Grundkurs


Zum Rheinwerk-Shop: Algorithmen mit Python
Algorithmen mit Python


Zum Rheinwerk-Shop: Objektorientierte Programmierung
Objektorientierte Programmierung


Zum Rheinwerk-Shop: Raspberry Pi. Das umfassende Handbuch
Raspberry Pi. Das umfassende Handbuch


Zum Rheinwerk-Shop: Roboter-Autos mit dem Raspberry Pi
Roboter-Autos mit dem Raspberry Pi


Zum Rheinwerk-Shop: Neuronale Netze programmieren mit Python
Neuronale Netze programmieren mit Python


 Lieferung
Versandkostenfrei bestellen in Deutschland, Österreich und der Schweiz
InfoInfo

 
 


Copyright © Rheinwerk Verlag GmbH 2020
Für Ihren privaten Gebrauch dürfen Sie die Online-Version natürlich ausdrucken. Ansonsten unterliegt das Openbook denselben Bestimmungen, wie die gebundene Ausgabe: Das Werk einschließlich aller seiner Teile ist urheberrechtlich geschützt.
Alle Rechte vorbehalten einschließlich der Vervielfältigung, Übersetzung, Mikroverfilmung sowie Einspeicherung und Verarbeitung in elektronischen Systemen.

 
[Rheinwerk Computing]

Rheinwerk Verlag GmbH, Rheinwerkallee 4, 53227 Bonn, Tel.: 0228.42150.0, Fax 0228.42150.77, service@rheinwerk-verlag.de

Cookie-Einstellungen ändern