CodeGym /Kurse /Python SELF DE /Arbeiten mit Verzeichnissen

Arbeiten mit Verzeichnissen

Python SELF DE
Level 21 , Lektion 6
Verfügbar

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()}")
Kommentare
TO VIEW ALL COMMENTS OR TO MAKE A COMMENT,
GO TO FULL VERSION