7 Möglichkeiten, um zu überprüfen, ob eine Datei oder ein Ordner in Python vorhanden ist
Veröffentlicht: 2021-06-16Die Python-Standardbibliothek enthält die meisten Funktionen, die ein Entwickler benötigt, um ein Problem zu lösen. In diesem Tutorial lernen Sie verschiedene Möglichkeiten kennen, um das Vorhandensein einer Datei oder eines Verzeichnisses nur mit integrierten Modulen zu überprüfen.
Die Überprüfung, ob sich eine Datei oder ein Skript an der richtigen Stelle befindet, ist für jedes CLI-Programm von entscheidender Bedeutung. Ihr Programm könnte nutzlos werden, wenn eine bestimmte Datei zum Zeitpunkt der Ausführung nicht vorhanden ist.
Im heutigen Tutorial erfahren Sie, wie Sie schnell überprüfen können, ob eine Datei oder ein Ordner in Python vorhanden ist.
Bevor es losgeht
Bevor Sie einen der folgenden Befehle ausführen, stellen Sie sicher, dass Python 3 auf Ihrem System installiert ist. Öffnen Sie Ihr Terminal und geben Sie den folgenden Befehl ein:
python --version # Python 3.9.5, my resultWenn Sie eine 2.x-Version haben, müssen Sie den Befehl „python3“ verwenden. Sehen Sie sich unsere Python-Installationsanleitung an, wenn Sie Python 3 nicht installiert haben.
Wir werden zusammen mit diesem Tutorial einige Testdateien verwenden, also stellen Sie sicher, dass Sie die folgenden Dateien erstellen:
touch testfile.txt mkdir testdirectory/ touch testdirectory/otherfile.txtDie obigen Befehle erstellen eine Datei zum Spielen, ein Testverzeichnis und eine weitere Datei im Testverzeichnis . Die Dateien können leer sein, da wir ihren Inhalt nicht lesen müssen.
Hinweis: Wenn Sie Windows verwenden, richten Sie die einfache Dateistruktur dieser Datei mit einem grafischen Dateimanager ein.
Schließlich verwenden wir Ipython als unsere interaktive Python-Shell, die eine hübsche Schnittstelle zum Arbeiten bietet. Dies ist nur eine Ware, daher nicht unbedingt erforderlich.
pip install ipythonDanach erhalten Sie Zugriff auf eine schöne Python-Shell, indem Sie einfach ipython eingeben .

Jetzt sind Sie fertig. Lassen Sie uns in Möglichkeiten eintauchen, um zu überprüfen, ob ein Ordner oder eine Datei in Python vorhanden ist.
Ausprobieren, öffnen und außer
Dies ist die einfachste Option. Wenn Sie versuchen, eine nicht vorhandene Datei zu öffnen, löst Python einen FileNotFoundError aus.
In [1]: open('im-not-here.txt') --------------------------------------------------------------------------- FileNotFoundError: [Errno 2] No such file or directory: 'im-not-here.txt'Wir können dies ausnutzen und die Ausnahme behandeln, falls die gesuchte Datei nicht existiert.
In [2]: try: ...: file = open('im-not-here.txt') ...: print(file) # File handler ...: file.close() ...: except FileNotFoundError: ...: print('Sorry the file we\'re looking for doesn\' exist') ...: exit() ...: Sorry the file we're looking for doesn't existIm obigen Code drucken wir eine benutzerdefinierte Nachricht und stoppen die Ausführung des Programms, wenn die Datei nicht existiert.
Beachten Sie, dass die Funktion exit() nur ausgeführt wird, wenn eine Ausnahme ausgelöst wird. Sehen wir uns an, was passiert, wenn die gesuchte Datei tatsächlich existiert.
In [2]: try: ...: file = open('testfile.txt') ...: print(file) # File handler ...: file.close() ...: except FileNotFoundError: ...: print('Sorry the file we\'re looking for doesn\'t exist') ...: exit() ...: <_io.TextIOWrapper name='testfile.txt' mode='r' encoding='UTF-8'>Beachten Sie, wie wir die Datei direkt nach dem Öffnen schließen. Dies gilt gemäß der Python-Dokumentation als bewährte Methode.
Aufruf von
<span class="pre">file.write()</span>ohne Verwendung des Schlüsselworts<span class="pre">with</span>oder Aufruf von<span class="pre">file.close()</span>dazu führen, dass die Argumente von<span class="pre">file.write()</span>nicht vollständig auf die Festplatte geschrieben werden, selbst wenn das Programm erfolgreich beendet wird.
Auch wenn wir nicht in die Datei schreiben, wird dringend empfohlen, die Datei zu schließen, da dies zu mehreren Leistungsproblemen führen kann.
Wenn wir die Datei nicht selbst schließen möchten, können wir den with context manager verwenden. Es ordnet Ressourcen präzise zu und gibt sie frei, daher müssen wir die Datei nicht schließen.
In [3]: try: ...: with open('testfile.txt') as file: ...: print(file) ...: # No need to close the file ...: except FileNotFoundError: ...: print('Sorry the file we\'re looking for doesn\'t exist') ...: exit() ...: ...: <_io.TextIOWrapper name='testfile.txt' mode='r' encoding='UTF-8'>Diese Methode ist beim Schreiben in Dateien äußerst nützlich, ist jedoch ineffizient, wenn wir nur prüfen möchten, ob eine Datei existiert. Lassen Sie uns in andere Optionen eintauchen, um dies zu erreichen.
os.path.exists()
Das os-Modul bietet mehrere Funktionen für die Interaktion mit dem Betriebssystem. Um zu überprüfen, ob eine Datei oder ein Ordner existiert, können wir den Pfad verwenden. exist()- Funktion, die den Pfad zur Datei oder zum Verzeichnis als Argument akzeptiert. Es gibt einen booleschen Wert zurück, der auf der Existenz des Pfads basiert.
Hinweis: Ein Pfad ist der eindeutige Speicherort einer Datei oder eines Verzeichnisses in einem Dateisystem
In Python enthält das Untermodul os.path Funktionen, die ausschließlich für den Betrieb mit Dateipfaden entwickelt wurden. Alle diese Funktionen akzeptieren das Pfadargument als Strings oder Bytes, und Sie können sich beispielsweise dafür entscheiden, mit absoluten Pfaden zu arbeiten:
/home/daniel/.bashrcOder mit relativen Pfaden, abhängig vom Verzeichnis, in dem Sie das Skript ausführen:
.bashrc # Running the script in my home folderHier sind mehrere Beispiele für die Verwendung der Funktion os.path.exists() , die in dem Verzeichnis ausgeführt wird, in dem sich meine Testdateien befinden:
In [1]: import os In [2]: os.path.exists('testfile.txt') Out[2]: True In [3]: os.path.exists('testdirectory') Out[3]: True In [4]: os.path.exists('hey-i-dont-exist') Out[4]: FalseWie Sie sehen, wird beim Testen mit der Datei testfile.txt und dem Ordner testdirectory True zurückgegeben , und wenn die Datei nicht vorhanden ist, wird False zurückgegeben .
os.pfad.isfile()
Wenn Sie nur die Existenz einer Datei (kein Verzeichnisses) beweisen wollten, würden Sie die Funktion os.path.isfile() aufrufen .
In [1]: import os In [2]: os.path.isfile('testfile.txt') Out[2]: True In [3]: os.path.isfile('testdirectory/') Out[3]: False In [4]: os.path.isfile('i-dont-even-exist') Out[4]: False In [5]: os.path.isfile('testdirectory/otherfile.txt') Out[5]: TrueHinweis: Unter UNIX enden alle Verzeichnisse mit einem Schrägstrich (/), während wir in Windows einen umgekehrten Schrägstrich (\) verwenden.

Im obigen Code gibt die Funktion isfile() zweimal False zurück. Sehen wir uns den Grund an:
-
testdirectory/ist ein Verzeichnis und wird daher nicht als Datei betrachtet. Dies ist nicht absolut richtig, da in Linux alles ein Dateideskriptor ist, aber Python behandelt Verzeichnisse nur der Einfachheit halber anders (Wenn Sie versuchen, ein Verzeichnis zu öffnen, erhalten Sie einen IsADirectoryError ) -
i-dont-even-existverweist auf eine Datei, die ironischerweise nicht existiert
os.pfad.isdir()
Wenn Sie überprüfen möchten, ob sich ein Verzeichnis an der richtigen Stelle befindet, müssen Sie die Funktion os.path.isdir() verwenden, die nur True zurückgibt, wenn der angegebene Pfad auf ein Verzeichnis zeigt.
In [1]: import os In [2]: os.path.isdir('testfile.txt') Out[2]: False In [3]: os.path.isdir('testdirectory') Out[3]: True In [4]: os.path.isdir('anotherfile.txt') Out[4]: FalseBeachten Sie, dass die obigen Beispiele auch dann False zurückgeben , wenn der Pfad auf eine vorhandene Datei verweist.
Globus
Das Modul glob bietet Funktionen, um mit Unix-Shell-ähnlichen Mustern zu arbeiten (daher funktioniert es unter Windows nicht richtig). Um zu überprüfen, ob eine Datei einem Muster im aktuellen Verzeichnis entspricht, können Sie die Funktion glob.glob() verwenden.
In [1]: import glob In [2]: glob.glob('testfile.txt') Out[2]: ['testfile.txt'] In [3]: glob.glob('testdirectory') Out[3]: ['testdirectory']Im obigen Code ist das an die Glob-Funktion übergebene Muster eine normale Zeichenfolge, die den Pfad zur Testdatei und zum Verzeichnis darstellt. Da beide Pfade existieren, gibt die Funktion eine Liste mit den passenden Pfadnamen darin zurück.
Hinweis: Wenn das Muster nicht übereinstimmt, erhalten Sie eine leere Liste.
Wenn man bedenkt, dass wir Muster an die Glob-Funktion übergeben können, warum testen Sie nicht einige der Hauptvorteile davon?
Der folgende Code ruft alle Dateipfade mit der Erweiterung .txt bzw. .py ab:
In [4]: glob.glob('*.txt') Out[4]: ['testfile.txt'] In [5]: glob.glob('*.py') Out[5]: ['pathlib-exists.py', 'list-dir.py', 'glob-file.py', 'open-except.py', 'subprocess-test.py', 'isfile.py', 'exists.py', 'isdir.py']Verwenden der Pfadklasse
Die Path-Klasse ist eine der besten Möglichkeiten, mit Pfaden zu arbeiten, da sie uns eine saubere Schnittstelle bietet, um mit Dateipfaden als Objekten zu arbeiten.
Das Sahnehäubchen ist, dass Path-Instanzen über alle Methoden verfügen, die Sie benötigen, um Informationen über einen bestimmten Pfad zu erhalten. Dies beinhaltet ähnliche Funktionalitäten wie die vorherigen Optionen.
Hinweis: Sie benötigen Python 3.4 oder höher, um die pathlib-Bibliothek zu verwenden
Die von Ihnen verwendeten Path-Methoden:
- Pfad().exists()
- Pfad().is_file()
- Pfad().is_dir()
Überprüfen Sie, ob ein Pfad existiert
In [1]: from pathlib import Path In [2]: Path('testfile.txt').exists() Out[2]: True In [3]: Path('im-not-here.txt').exists() Out[3]: False In [4]: Path('testdirectory').exists() Out[4]: TrueFunktioniert genauso wie os.path.exists() .
Überprüfen Sie, ob der Pfad auf eine Datei verweist
In [5]: Path('testfile.txt').is_file() Out[5]: True In [6]: Path('testdirectory').is_file() Out[6]: FalseÄquivalent zu os.path.isfile() .
Überprüfen Sie, ob der Pfad auf ein Verzeichnis zeigt
In [7]: Path('testfile.txt').is_dir() Out[7]: False In [8]: Path('testdirectory').is_dir() Out[8]: TrueEntspricht os.path.isdir().
Teilprozess
Wenn Sie ein Liebhaber von Subprozessmodulen sind, müssen Sie diese Option kennen. Mit dem Befehl test können Sie feststellen, ob eine Datei oder ein Ordner vorhanden ist.
Hinweis: Der Testbefehl funktioniert nur unter Unix.
Die folgenden Test-Flags werden die Aufgabe erledigen:
- test -e: Prüfe ob ein Pfad existiert
- test -f: Prüfen, ob eine Datei existiert
- test-d: Prüfen, ob ein Ordner vorhanden ist
Falls Sie in weitere Testflags eintauchen möchten, können Sie das Handbuch lesen, indem Sie Folgendes ausführen:
man testÜberprüfen eines Pfads mit Unterprozess:
Der folgende Code bestimmt, ob ein Pfad existiert, indem er den Rückgabecode des Unterprozesses mit 0 vergleicht.
Denken Sie daran, dass unter Linux, wenn ein Prozess gut gelaufen ist, er Null zurückgibt, wenn nicht, wird jeder andere Code zurückgegeben.
In [1]: from subprocess import run In [2]: run(['test', '-e', 'testfile.txt']).returncode == 0 Out[2]: True In [3]: run(['test', '-e', 'im-not-here.txt']).returncode == 0 Out[3]: FalseIn der ersten Anweisung importieren wir das Unterprozessmodul, verwenden dann die Funktion run und rufen seinen Rückgabecode ab.
Überprüfen der Existenz einer Datei mit subprocess
In [4]: run(['test', '-f', 'testfile.txt']).returncode == 0 Out[4]: True In [5]: run(['test', '-f', 'testdirectory']).returncode == 0 Out[5]: FalseÜberprüfen eines Verzeichnisses mit Unterprozess:
In [6]: run(['test', '-d', 'testfile.txt']).returncode == 0 Out[6]: False In [7]: run(['test', '-d', 'testdirectory']).returncode == 0 Out[7]: TrueEs wird nicht empfohlen, diese Option zu verwenden, da sie mehr Ressourcen verbraucht und wir keinen Vorteil daraus ziehen.
Um zusammenzufassen
Python ist eine der am häufigsten verwendeten Programmiersprachen zur Automatisierung von Prozessen durch Interaktion mit dem Betriebssystem. Eine coole Sache, die Sie damit machen können, ist zu überprüfen, ob eine Datei oder ein Ordner vorhanden ist.
Am einfachsten geht das:
- Dateiausnahmen sofort öffnen und behandeln
- Verwenden der Funktion exist () der Module os.path oder pathlib .
In diesem Tutorial haben Sie gelernt:
- So öffnen Sie eine Datei und behandeln Ausnahmen, falls sie nicht existiert
- Die Bedeutung von Wegen
- 3 verschiedene Funktionen, die das os.path- Submodul bietet, um die Existenz einer Datei oder eines Ordners zu überprüfen
- Unix verwendet Schrägstriche (/), während Windows umgekehrte Schrägstriche (\) verwendet.
Weiter lesen: Was ist ein Unterprozess in Python? [5 Anwendungsbeispiele]
