Geekflare wird von unserem Publikum unterstützt. Es kann sein, dass wir durch den Kauf von Links auf dieser Seite Affiliate-Provisionen verdienen.
Unter Entwicklung Zuletzt aktualisiert: September 24, 2023
Weitergeben:
Invicti Web Application Security Scanner - die einzige Lösung, die eine automatische Überprüfung von Schwachstellen mit Proof-Based Scanning™ ermöglicht.

Die 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, wie Sie das Vorhandensein einer Datei oder eines Verzeichnisses nur mit Hilfe von integrierten Modulen überprüfen können

Die Überprüfung, ob sich eine Datei oder ein Skript an der richtigen Stelle befindet, ist für jedes CLI-Programm entscheidend. Ihr Programm könnte unbrauchbar werden, wenn eine bestimmte Datei zum Zeitpunkt der Ausführung nicht vorhanden ist.

In der heutigen Anleitung lernen Sie einige schnelle Möglichkeiten kennen, um zu prüfen, ob eine Datei oder ein Ordner in Python existiert

Vor dem Start

Vergewissern Sie sich, dass Sie Python 3 auf Ihrem System installiert haben, bevor Sie einen der folgenden Befehle ausführen. Öffnen Sie Ihr Terminal und geben Sie den folgenden Befehl ein

python --version
# Python 3.9.5, mein Ergebnis

Wenn Sie eine 2.x-Version haben, müssen Sie den Befehl "python3" verwenden. Schauen Sie sich unsere Python-Installationsanleitung an, wenn Sie Python 3 noch nicht installiert haben

Da wir in diesem Tutorial einige Testdateien verwenden werden, sollten Sie die folgenden Dateien erstellen

touch testfile.txt

mkdir

testdirectory/
touch testdirectory/otherfile.txt

Die obigen Befehle erstellen eine Datei zum Spielen, ein Testverzeichnis und eine weitere Datei innerhalb des Testverzeichnisse. Die Dateien können leer sein, da wir ihren Inhalt nicht lesen müssen,

Hinweis: Wenn Sie Windows verwenden, richten Sie diese einfache Dateistruktur mit einem grafischen Dateimanager ein

Schließlich werden wir Ipython als unsere interaktive Python-Shell verwenden, die eine hübsche Oberfläche für die Arbeit bietet. Dies ist nur ein Hilfsmittel und daher nicht unbedingt erforderlich

pip install ipython

Nachdem Sie dies getan haben, erhalten Sie Zugang zu einer schönen Python-Shell, indem Sie einfach ipython eintippen

Ipython interaktive Shell mit Python 3.9

Jetzt sind Sie bereit, und wir können prüfen, ob ein Ordner oder eine Datei in Python existiert

Versuchen, Öffnen und Außer

Dies ist die einfachste Möglichkeit. Wenn Sie versuchen, eine Datei zu öffnen, die nicht existiert, gibt Python einen FileNotFoundError aus

In <x><x><x><x><x><x>[1]</x></x></x></x></x></x>: 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 <x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: try:
...: file = open('im-nicht-hier.txt')
...: print(file) # File handler
...: file.close()
...: except FileNotFoundError:
....: print('Leider existiert die gesuchte Datei nicht')
...: exit()
...:
Leider existiert die gesuchte Datei

nicht


Im obigen Code geben wir eine benutzerdefinierte Meldung aus und brechen die Ausführung des Programms ab, wenn die Datei nicht existiert.

Beachten Sie, dass die Funktion exit() nur ausgeführt wird, wenn eine Ausnahme ausgelöst wird. Lassen Sie uns sehen, was passiert, wenn die gesuchte Datei tatsächlich existiert

In <x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: try:
...: file = open('testfile.txt')
...: print(file) # File handler
...: file.close()
...: except FileNotFoundError:
...: print('Die gesuchte Datei existiert leider nicht')
...: exit()
...:
<_io.TextIOWrapper name='testfile.txt' mode='r' encoding='UTF-8'&gt

Beachten Sie, dass wir die Datei gleich nach dem Öffnen wieder schließen. Laut der Python-Dokumentation ist dies eine gute Praxis
Der

Aufruf von <span class="pre">file.write()</span> ohne Verwendung des Schlüsselworts <span class="pre">with</span> oder der Aufruf von <span class="pre">file.close()</span> kann 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

Selbst wenn wir nicht in die Datei schreiben, ist es äußerst empfehlenswert, die Datei zu schließen, da dies zu zahlreichen Leistungsproblemen führen kann

Wenn wir die Datei nicht selbst schließen wollen, können wir den mit context manager verwenden. Er weist Ressourcen präzise zu und gibt sie wieder frei, so dass wir die Datei nicht schließen müssen.

In <x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: try:
...: with open('testfile.txt') as file:
...: print(file)
...:         # Die Datei muss nicht geschlossen werden
...: except FileNotFoundError:
...: print('Sorry the file we\'re looking for doesn\'t exist')
...: exit()
...:
...:
<_io.TextIOWrapper name='testfile.txt' mode='r' encoding='UTF-8'&gt

Diese Methode ist sehr nützlich, wenn Sie in Dateien schreiben, aber sie ist ineffizient, wenn Sie nur prüfen wollen, ob eine Datei existiert. Schauen wir uns andere Optionen an, um dies zu erreichen

os.path.exists()

Das os-Modul bietet mehrere Funktionen zur Interaktion mit dem Betriebssystem. Um zu prüfen, ob eine Datei oder ein Ordner existiert, können wir die Funktion Pfad.existiert() verwenden, die den Pfad zur Datei oder zum Verzeichnis als Argument akzeptiert. Sie gibt einen booleschen Wert für die Existenz des Pfades zurück

Hinweis: Ein Pfad ist die eindeutige Position einer Datei oder eines Verzeichnisses in einem Dateisystem.

In Python enthält das Untermodul os.pfad Funktionen, die ausschließlich für den Umgang mit Dateipfaden bestimmt sind. Alle diese Funktionen akzeptieren das Pfadargument als Zeichenkette oder Byte, und Sie können sich entscheiden, mit absoluten Pfaden zu arbeiten, zum Beispiel

/home/daniel/.bashrc

Oder mit relativen Pfaden, abhängig von dem Verzeichnis, in dem Sie das Skript ausführen

.bashrc
# Ich führe das Skript in meinem Heimatordner

aus
Hier sind mehrere Beispiele, die die Funktion os.path.exists() verwenden und in dem Verzeichnis ausgeführt werden, in dem sich meine Testdateien befinden

In <x><x><x><x><x><x>[1]</x></x></x></x></x></x>: import os

In <x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: os.path.exists('testfile.txt')
Out<x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: True

In <x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: os.path.exists('testdirectory')
Out<x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: True

In <x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: os.path.exists('hey-i-dont-exist')
Out<x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: False

Wie Sie sehen, wird Wahr zurückgegeben, wenn Sie mit der Datei testdatei.txt und dem Ordner testdirectory testen, und Falsch, wenn die Datei nicht existiert

os.path.isfile()

Wenn Sie nur die Existenz einer Datei (und nicht eines Verzeichnisses) nachweisen möchten, rufen Sie die Funktion os.path.isfile() auf

In <x><x><x><x><x><x>[1]</x></x></x></x></x></x>: import os

In <x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: os.path.isfile('testfile.txt')
Out<x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: True

In <x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: os.path.isfile('testdirectory/')
Out<x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: False

In <x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: os.path.isfile('i-dont-even-exist')
Out<x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: False

In <x><x><x><x><x><x><x>[5]</x></x></x></x></x></x></x>: os.path.isfile('testdirectory/otherfile.txt')
Out[<x><x><x><x><x><x><x>5]</x></x></x></x></x></x></x>: True

Hinweis: Unter UNIX enden alle Verzeichnisse mit einem Schrägstrich (/), während wir unter Windows einen Backslash (\) verwenden.

Im obigen Code hat die Funktion isfile() zweimal Falsch zurückgegeben, lassen Sie uns sehen warum

  • testdirectory/ ist ein Verzeichnis, daher wird es nicht als Datei betrachtet. Das ist zwar nicht ganz richtig, da in Linux alles ist ein DateideskriptorAber Python behandelt Verzeichnisse der Einfachheit halbwegs anders (wenn Sie versuchen, ein Verzeichnis zu öffnen, erhalten Sie einen IsADirectoryError)
  • i-dont-even-exist verweist auf eine Datei, die ironischerweise nicht existiert

os.path.isdir()

Wenn Sie überprüfen wollen, ob ein Verzeichnis an der richtigen Stelle liegt, müssen Sie die Funktion os.path.isdir() verwenden, die nur Wahr zurückgibt, wenn der angegebene Pfad auf einem Verzeichnis zeigt

In <x><x><x><x><x><x>[1]</x></x></x></x></x></x>: import os

In <x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: os.path.isdir('testfile.txt')
Out<x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: False

In <x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: os.path.isdir('testdirectory')
Out<x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: True

In <x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: os.path.isdir('anotherfile.txt')
Out<x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: False

Beachten Sie, dass die obigen Beispiele Falsch zurückgeben, auch wenn der Pfad auf eine existierende Datei verweist

Globus

Das Modul Globus bietet Funktionen für die Arbeit mit Unix-Shell-ähnlichen Mustern (daher funktioniert es unter Windows nicht richtig). Um zu prüfen, ob eine Datei mit einem Muster innerhalb des aktuellen Verzeichnisses übereinstimmt, können Sie die Funktion glob.glob() verwenden

In <x><x><x><x><x><x>[1]</x></x></x></x></x></x>: import glob

In <x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: glob.glob('testfile.txt')
Out<x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: ['testfile.txt']

In [ <x><x><x><x><x><x><x><x><x><x><x><x>3]</x></x></x></x></x></x></x></x></x></x></x></x>: glob.glob('testdirectory')
Out<x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: ['testdirectory']

Im obigen Code ist das an die Funktion global übergebene Muster eine normale Zeichenkette, die den Pfad zur Testdatei und zum Testverzeichnis darstellt. Da beide Pfade existieren, gibt die Funktion eine Liste mit den übereinstimmenden Pfadnamen zurück.

Hinweis: Wenn das Muster nicht übereinstimmt, erhalten Sie eine leere Liste

Wenn man bedenkt, dass wir der globalen Funktion Muster übergeben können, warum sollten wir nicht einige der wichtigsten Vorteile dieser Funktion testen?

Der folgende Code ermittelt alle Dateipfade mit der Erweiterung .txt bzw. .py

In <x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: glob.glob('*.txt')
Out<x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: ['testfile.txt']

In [ <x><x><x><x><x><x><x>5]</x></x></x></x></x></x></x>: glob.glob('*.py')
Out<x><x><x><x><x><x><x>[5]</x></x></x></x></x></x></x>:
['pathlib-exists.py',
 'list-dir.py',
 'glob-file.py',
 'open-except.py',
 'subprocess-test.py',
 'isfile.py',
 'exists.py',
 'isdir.py']

Verwendung der Path-Klasse

Die Pfad-Klasse ist eine der besten Möglichkeiten, um mit Pfaden zu arbeiten, da sie uns eine saubere Schnittstelle für die Arbeit mit Dateipfaden als Objekte bietet

Das Tüpfelchen auf dem i ist, dass Pfad-Instanzen über alle Methoden verfügen, die Sie benötigen, um Informationen über einen bestimmten Pfad zu erhalten. Dazu gehören ähnliche Funktionen wie bei den vorherigen Optionen

Hinweis: Sie benötigen Python 3.4 oder höher, um die pathlib-Bibliothek zu verwenden

Die Path-Methoden, die Sie verwenden werden

Prüfen Sie, ob ein Pfad existiert

In <x><x><x><x><x><x>[1]</x></x></x></x></x></x>: from pathlib import Path

In <x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: Path('testfile.txt').exists()
Out<x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: True

In <x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: Path('im-not-here.txt').exists()
Out<x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: False

In <x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: Path('testdirectory').exists()
Out<x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: True

Funktioniert genauso wie os.path.exists()

Prüfen Sie, ob der Pfad auf eine Datei zeigt

In <x><x><x><x><x><x><x>[5]</x></x></x></x></x></x></x>: Path('testfile.txt').is_file()
Out<x><x><x><x><x><x><x>[5]</x></x></x></x></x></x></x>: True

In <x><x><x>[6</x></x></x>]: Path('testdirectory').is_file()
Out<x><x><x>[6]</x></x></x>: False

Äquivalent zu os.path.isfile()

Prüfen Sie, ob der Pfad auf ein Verzeichnis zeigt

In <x><x><x>[7]</x></x></x>: Path('testfile.txt').is_dir()
Out<x><x><x>[7]</x></x></x>: False

In [ <x>8</x>]: Path('testdirectory').is_dir()
Out<x>[8]</x>: True

Entspricht os.path.isdir()

Unterprozess

Wenn Sie ein Liebhaber von Unterprozess-Module sind, müssen Sie diese Option kennen. Mit dem Befehl test können Sie feststellen, ob eine Datei oder ein Ordner existiert

Hinweis: Der Befehl Test funktioniert nur unter Unix

Mit den folgenden Test-Flags können Sie die Arbeit erledigen

  • test -e: Prüfen Sie, ob ein Pfad existiert
  • test -f: Prüfen Sie, ob eine Datei vorhanden ist
  • test-d : Prüfen Sie, ob ein Ordner vorhanden ist

Wenn Sie mehr über die Test-Flags erfahren möchten, können Sie das Handbuch lesen, indem Sie

man test

Prüfen eines Pfades mit Unterprozess:

Der folgende Code stellt fest, ob ein Pfad existiert, indem er den Rückgabewert des Unterprozesses mit 0 vergleicht

Denken Sie daran, dass unter Linux ein Prozess, wenn er gut gelaufen ist, Null zurückgibt, wenn nicht, einen beliebigen anderen Code

In <x><x><x><x><x><x>[1]</x></x></x></x></x></x>: from subprocess import run

In <x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: run(['test', '-e', 'testfile.txt']).returncode == 0
Out<x><x><x><x><x><x><x><x><x><x><x><x><x>[2]</x></x></x></x></x></x></x></x></x></x></x></x></x>: True

In <x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: run(['test', '-e', 'im-not-here.txt']).returncode == 0
Out<x><x><x><x><x><x><x><x><x><x><x><x>[3]</x></x></x></x></x></x></x></x></x></x></x></x>: False

In der ersten Anweisung importieren wir das Modul subprocess, verwenden dann die Funktion laufen und erhalten ihren Rückgabewert

Überprüfen Sie die Existenz einer Datei mit subprocess

In <x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: run(['test', '-f', 'testfile.txt']).returncode == 0
Out<x><x><x><x><x><x><x><x><x><x><x>[4]</x></x></x></x></x></x></x></x></x></x></x>: True

In <x><x><x><x><x><x><x>[5]</x></x></x></x></x></x></x>: run(['test', '-f', 'testdirectory']).returncode == 0
Out<x><x><x><x><x><x><x>[5]</x></x></x></x></x></x></x>: False

Überprüfen eines Verzeichnisses mit einem Unterprozess:

In <x><x><x>[6]</x></x></x>: run(['test', '-d', 'testfile.txt']).returncode == 0
Out[<x><x><x>6]</x></x></x>: False

In [ <x><x><x>7]</x></x></x>: run(['test', '-d', 'testdirectory']).returncode == 0
Out<x><x><x>[7]</x></x></x>: True

Es ist nicht empfehlenswert, diese Option zu verwenden, da sie mehr Ressourcen verbraucht und wir keinen Vorteil daraus ziehen können.

Zusammengefasst

Python ist eine der am häufigsten verwendeten Programmiersprachen, um Prozesse durch Interaktion mit dem Betriebssystem zu automatisieren. Eine coole Sache, die Sie damit machen können, ist zu prüfen, ob eine Datei oder ein Ordner existiert

Die einfachsten Möglichkeiten dazu sind

  • Öffnen und sofortige Behandlung von Dateiausnahmen
  • Verwendung der Funktion existiert() das Modul os.pfad oder pathlib.

In diesem Lernprogramm haben Sie gelernt

  • Wie man eine Datei öffnet und Ausnahmen behandelt, wenn sie nicht existiert
  • Die Bedeutung von Pfaden
  • 3 verschiedene Funktionen, die das Submodul os.pfad zur Verfügung stellt, um die Existenz einer Datei oder eines Ordners zu überprüfen
  • Unix verwendet Schrägstriche (/), während Windows umgekehrte Schrägstriche (\) verwendet

Lesen Sie weiter: Was ist ein Subprozess in Python? [5 Anwendungsbeispiele]

  • Daniel Diaz
    Autor
Dank an unsere Sponsoren
Weitere gute Lektüre zum Thema Entwicklung
Energie für Ihr Unternehmen
Einige der Tools und Dienste, die Ihr Unternehmen beim Wachstum unterstützen.
  • Invicti nutzt das Proof-Based Scanning™, um die identifizierten Schwachstellen automatisch zu überprüfen und innerhalb weniger Stunden verwertbare Ergebnisse zu erzielen.
    Versuchen Sie Invicti
  • Web Scraping, Residential Proxy, Proxy Manager, Web Unlocker, Search Engine Crawler und alles, was Sie zum Sammeln von Webdaten benötigen.
    Versuchen Sie Brightdata
  • Monday.com ist ein All-in-One-Betriebssystem, mit dem Sie Projekte, Aufgaben, Arbeit, Vertrieb, CRM, Arbeitsabläufe und vieles mehr verwalten können.
    Versuch Montag
  • Intruder ist ein Online-Schwachstellen-Scanner, der Schwachstellen in Ihrer Infrastruktur aufspürt, um kostspielige Datenschutzverletzungen zu vermeiden.
    Versuchen Sie Intruder