7.1 Grundlegende Operationen
Arbeiten mit Dateien hast du gelernt, jetzt lass uns mit
Verzeichnissen arbeiten. Manchmal ist das ähnlich wie mit Dateien, manchmal nicht.
Verzeichnisse haben ihre eigenen Besonderheiten. Die wichtigsten Funktionen zur Arbeit mit
Verzeichnissen werden von den Modulen os
und
shutil
bereitgestellt.
Die wichtigsten Operationen mit Verzeichnissen:
Erstellen eines Verzeichnisses
Um ein neues Verzeichnis zu erstellen, benutzt man die Funktion
os.mkdir()
.
Beispiel:
import os
# Erstellung eines neuen Verzeichnisses
os.mkdir('new_directory')
print("Verzeichnis 'new_directory' wurde erstellt")
Erstellen mehrerer verschachtelter Verzeichnisse
Um mehrere verschachtelte Verzeichnisse zu erstellen, benutzt man die Funktion
os.makedirs()
.
Beispiel:
import os
# Erstellung mehrerer verschachtelter Verzeichnisse
os.makedirs('parent_directory/child_directory')
print("Verschachtelte Verzeichnisse 'parent_directory/child_directory' wurden erstellt")
Löschen eines Verzeichnisses
Um ein leeres Verzeichnis zu löschen, benutzt man die Funktion
os.rmdir()
. Um ein Verzeichnis mit Inhalt zu löschen,
benutzt man die Funktion shutil.rmtree()
.
Beispiel:
import os
# Löschen eines leeren Verzeichnisses
os.rmdir('new_directory')
print("Verzeichnis 'new_directory' wurde gelöscht")
Beispiel zum Löschen eines Verzeichnisses mit Inhalt:
import shutil
# Löschen eines Verzeichnisses mit Inhalt
shutil.rmtree('parent_directory')
print("Verzeichnis 'parent_directory' und dessen gesamter Inhalt wurden gelöscht")
Wichtig!
Niemals ein Verzeichnis mit
gesamtem Inhalt löschen. In einem von 10 Fällen schleicht sich ein Bug in dein Programm ein
und löscht die Hälfte deiner Dateien auf der Festplatte. Das passiert jedem.
Also niemals so machen.
Es wird empfohlen, vor dem Löschen eines Verzeichnisses dessen Existenz mit der
Funktion os.path.exists()
zu überprüfen. Dies kann Fehler vermeiden,
die mit dem Löschen eines nicht vorhandenen Verzeichnisses oder eines falschen Pfades verbunden sind.
Beispiel:
import os
import shutil
# Überprüfen der Existenz des Verzeichnisses vor dem Löschen
directory_path = 'parent_directory'
if os.path.exists(directory_path):
shutil.rmtree(directory_path)
print(f"Verzeichnis '{directory_path}' und dessen gesamter Inhalt wurden gelöscht")
else:
print(f"Verzeichnis '{directory_path}' existiert nicht, Löschen nicht möglich")
7.2 Kopieren von Verzeichnissen
Verschieben und Umbenennen eines Verzeichnisses
Um ein Verzeichnis zu verschieben oder umzubenennen, benutzt man die Funktion
os.rename()
.
import os
# Erstellen eines Verzeichnisses für das Beispiel
os.mkdir('original_directory')
# Umbenennen des Verzeichnisses
os.rename('original_directory', 'renamed_directory')
print("Verzeichnis 'original_directory' wurde in 'renamed_directory' umbenannt")
Kopieren eines Verzeichnisses
Um ein Verzeichnis zu kopieren, benutzt man die Funktion
shutil.copytree()
. Diese Funktion kopiert nicht nur den Inhalt des Verzeichnisses,
sondern erstellt auch ein neues Verzeichnis im angegebenen Zielpfad.
import os
import shutil
# Erstellen eines Verzeichnisses für das Beispiel
os.mkdir('source_directory')
# Kopieren des Verzeichnisses
shutil.copytree('source_directory', 'destination_directory')
print("Verzeichnis 'source_directory' wurde nach 'destination_directory' kopiert")
7.3 Aktuelles Verzeichnis
Zu jedem ausgeführten Programm gehört das Konzept eines „aktuellen Arbeitsverzeichnisses“. Normalerweise ist das das Verzeichnis, in dem das Programm ausgeführt wird und in dem es seine Hilfsdateien sucht. Zum Beispiel werden alle Dateien, deren Pfade ohne Verzeichnisnamen angegeben wurden, im aktuellen Verzeichnis gesucht.
Abrufen des aktuellen Arbeitsverzeichnisses
Um das aktuelle Arbeitsverzeichnis abzurufen, benutzt man die Funktion
os.getcwd()
.
import os
# Abrufen des aktuellen Arbeitsverzeichnisses
current_directory = os.getcwd()
print(f"Aktuelles Arbeitsverzeichnis: {current_directory}")
Ändern des aktuellen Arbeitsverzeichnisses
Um das aktuelle Arbeitsverzeichnis zu ändern, benutzt man die Funktion
os.chdir()
.
import os
# Ändern des aktuellen Arbeitsverzeichnisses
os.chdir('new_directory')
print(f"Aktuelles Arbeitsverzeichnis wurde geändert in: {os.getcwd()}")
Das Ändern des aktuellen Arbeitsverzeichnisses kann die Pfade zu Dateien beeinflussen, die relativ zum aktuellen Verzeichnis angegeben werden. Sei vorsichtig beim Ändern des Verzeichnisses, denn es kann zu Fehlern führen, wenn das Programm eine Datei im ursprünglichen Verzeichnis erwartet.
Überprüfen der Existenz eines Verzeichnisses
Um die Existenz eines Verzeichnisses zu überprüfen, benutzt man die Funktion
os.path.exists()
.
import os
# Überprüfung der Existenz des Verzeichnisses
directory_path = 'new_directory'
if os.path.exists(directory_path):
print(f"Verzeichnis '{directory_path}' existiert")
else:
print(f"Verzeichnis '{directory_path}' existiert nicht")
Abrufen des absoluten Pfads eines Verzeichnisses
Um den absoluten Pfad zu erhalten, benutzt man die Funktion
os.path.abspath()
.
import os
# Abrufen des absoluten Pfads eines Verzeichnisses
relative_path = 'example_directory'
absolute_path = os.path.abspath(relative_path)
print(f"Absoluter Pfad: {absolute_path}")
7.4 Verzeichnisinhalt
Abrufen der Liste von Dateien und Verzeichnissen
Um die Liste der Dateien und Verzeichnisse im angegebenen Verzeichnis
zu erhalten, benutzt man die Funktion os.listdir()
.
import os
# Abrufen der Liste von Dateien und Verzeichnissen im aktuellen Verzeichnis
contents = os.listdir('.')
print(f"Inhalt des aktuellen Verzeichnisses: {contents}")
Man kann mit Dateien und Verzeichnissen nicht nur als Listen von Pfaden arbeiten, sondern auch als komplexere Objekte.
Abrufen von Informationen über den Verzeichnisinhalt mit
os.scandir()
Die Funktion os.scandir()
gibt einen Iterator zurück, der
DirEntry
-Objekte für jeden Eintrag im Verzeichnis liefert. Diese Objekte
enthalten Informationen über Dateien und Verzeichnisse, was deren Verwendung im Vergleich zu
os.listdir()
effizienter macht, insbesondere bei großen Katalogen.
import os
# Abrufen von Informationen über den Verzeichnisinhalt
with os.scandir('.') as entries:
for entry in entries:
print(f"Name: {entry.name}, Ist Verzeichnis: {entry.is_dir()}, Ist Datei: {entry.is_file()}")
GO TO FULL VERSION