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:
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']
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']
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']
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.
Hinterlasse mir gerne einen Kommentar zum Artikel und wie er dir weitergeholfen hat beziehungsweise, was dir helfen würde das Thema besser zu verstehen. Oder hast du einen Fehler entdeckt, den ich korrigieren sollte? Schreibe mir auch dazu gerne ein Feedback!
Es sind noch keine Kommentare vorhanden? Sei der/die Erste und verfasse einen Kommentar zum Artikel "In Python Verzeichnisse einlesen"!