Lerne Coding
In Python Verzeichnisse einlesen
18.12.2020

Verzeichnis bzw. Ordner auslesen mit Python

Inhaltsverzeichnis
[[TABLE OF CONTENTS]]
access_timeGeschätzte Lesezeit ca. Minuten

In diesem Artikel will ich dir Möglichkeiten vorstellen, mit denen du den Inhalt von Ordnern mit Python auslesen kannst.

Für die nachfolgende Beispiele nutze ich diese Ordnerstruktur:

Python Verzeichnis auslesen

Das Modul os stellt mit der Methode listdir eine einfache Möglichkeit bereit, um ein Verzeichnis auszulesen.

Wichtig ist, dass du das Modul vorher importierst. Es ist ein Standardmodul in Python und muss daher nicht erst über pip installiert werden.

In diesem Beispiel wird vom "current working directory" aus, die Liste der Dateien und Ordner im aktuellen Verzeichnis ausgegeben. Also von dem Ort aus, von dem wir das Skript gestartet haben.

import os

files = os.listdir()

print(files) # ['./globtest.py', './test3.py', './main.py']

Alternativ kannst du auch mit relativen oder absoluten Pfadangaben arbeiten. Mit ../ kannst du zum Beispiel das Eltern-Verzeichnis anzeigen lassen.

files = os.listdir('../') 

Mit der Methode os.path.isdir() kannst du prüfen, ob ein Pfad ein Verzeichnis ist. Falls die Methode false zurückgibt, muss es in unserem Fall eine Datei sein, da wir uns auf eine Liste von bereits existierenden Dateien bzw. Ordnern beziehen. So kann man mit folgendem Skript eine Trennung zwischen Dateien und Verzeichnissen vornehmen. Alternativ kannst du auch os.path.isfile() verwenden, um zu prüfen, ob ein Pfad eine Datei ist.

import os

path = "./"

files = []
paths = []

for file in os.listdir(path):
    if os.path.isdir(path + file):
        paths.append(path + file) 
    else:
        files.append(path + file)

print(files) # ['./globtest.py', './test3.py', './main.py']
print(paths) # ['./test', './test-special']

Verzeichnisse nach Dateitypen und Dateinamen filtern

Manchmal ist es notwendig, dass man nur Dateien nach einem bestimmten Schema ausliest. So kann man zum Beispiel nur Dateien mit der Dateiendung ".py" selektieren oder alle Python Dateien, die sich in allen Unterordnern befinden.

Mit dem nachfolgenden Befehl kannst du alle Python Dateien im aktuellen Verzeichnis auslesen. Denke immer an das import am Anfang der Python Datei, um die entsprechenden Module verwenden zu können.

import glob

result = glob.glob('*.py')

print(result) 

# ['globtest.py', 'main.py']

Wenn du von verschiedenen Unterordner alle Python Dateien auslesen willst, kannst du das mit der folgenden Methode erreichen. In diesem Fall werden aber nicht die Python Dateien aus dem aktuellen Ordner ausgelesen und auch nicht die, welche noch in tieferen Ebenen liegen.

import glob

path = glob.glob('**/*.py')

print(path) 

# ['test/test.py', 'test-special/python3333.py']

Um alle Python Dateien aus den Verzeichnissen zu erhalten, die in diesem Ordner und darunter liegen, kannst du die folgende Methode verwenden.

import glob

path = glob.glob('**/*.py',recursive=True)

print(path) 

# ['globtest.py', 'main.py', 'test/test.py', 'test/test2/test3.py', 'test-special/python3333.py']

Alle Dateien in einem Verzeichnis rekursiv auslesen

Eine weitere Variante, um alle Dateien und Ordner in einem Verzeichnis mit Python auszulesen, ist die Methode os.walk(). Dieser gibt ein Tuple zurück der Verzeichnissen und Dateien direkt unterscheidet und es wird Ausgegeben auf welcher Ebene du dich befindest.

import os

for (root,dirs,files) in os.walk('./'):
    print("Root:" + str(root))
    print("Verzeichnisse: " + str(dirs))
    print("Dateien: " + str(files))

Die Ausgabe sieht wie folgt aus:

# 1. Schleife
Root:./
Verzeichnisse: ['test', 'test-special']
Dateien: ['globtest.py', 'test3.py', 'main.py']

# 2. Schleife
Root:./test
Verzeichnisse: ['test2']
Dateien: ['test.py']

# 3. Schleife
Root:./test/test2
Verzeichnisse: []
Dateien: ['test3.py']

# 4. Schleife
Root:./test-special
Verzeichnisse: []
Dateien: ['python3333.py']

Fazit

Wenn du nur bestimmte Dateien aus verschiedenen Verzeichnissen auslesen willst, ist das glob Modul die richtige Wahl für dich. Zum Auslesen eines einzelnen Verzeichnisses ist scandir besser geeignet und zum rekursiven Auslesen von Unterordnern ist walk das passende Modul.

Bildquelle - Vielen Dank an die Ersteller:innen für dieses Bild
Kommentare zum Artikel

Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "In Python Verzeichnisse einlesen"!

Kommentar schreiben

Verwante Beiträge
close