Vor- und Nachteile zwischen os.path.exists vs os.path.isdir


79

Ich überprüfe, ob ein Verzeichnis vorhanden ist, aber ich habe festgestellt, dass ich os.path.existsanstelle von verwende os.path.isdir. Beide funktionieren einwandfrei, aber ich bin gespannt, welche Vorteile es bietet, isdiranstatt zu verwenden exists.

Antworten:


129

os.path.existswird auch zurückgegeben, Truewenn es eine reguläre Datei mit diesem Namen gibt.

os.path.isdirwird nur zurückgegeben, Truewenn dieser Pfad vorhanden ist und ein Verzeichnis oder eine symbolische Verknüpfung zu einem Verzeichnis ist.


1
os.path.isdirkehrt für mich auf einem Symlink zurück.
Kaz

Ich werde os.path.isdir('.ipynb_checkpoints')wahr zurückkehren
Little Bobby Tables

In Python 2.7 gibt os.path.isdir true für Symlinks zu Verzeichnissen und false für Symlinks zu Dateien zurück (wie erwartet). Dies kann jedoch zu Problemen mit os.rmdir führen, da es bei einem Symlink fehlschlägt, selbst wenn es sich um einen Symlink zu einem Verzeichnis handelt.
Halsafar

6

So wie es sich anhört: Wenn der Pfad existiert, aber eine Datei und kein Verzeichnis ist, isdirwird zurückgegeben False. In der Zwischenzeit existswird Truein beiden Fällen zurückkehren.


2

os.path.isdir () prüft, ob der Pfad existiert und ein Verzeichnis ist, und gibt für den Fall TRUE zurück.

In ähnlicher Weise prüft os.path.isfile () , ob der Pfad vorhanden ist und eine Datei ist, und gibt für den Fall TRUE zurück.

Und os.path.exists () prüft, ob der Pfad vorhanden ist, und kümmert sich nicht darum, ob der Pfad auf eine Datei oder ein Verzeichnis verweist und in beiden Fällen TRUE zurückgibt.


0

Meistens ist es das gleiche.

Der Pfad kann jedoch physisch existieren, während path.exists()False zurückgegeben wird. Dies ist der Fall, wenn os.stat () für diese Datei False zurückgibt.

Wenn der Pfad physisch vorhanden ist, path.isdir()wird immer True zurückgegeben. Dies hängt nicht von der Plattform ab.


Nicht klar, was dieser letzte Absatz bedeutet. Wenn ein Verzeichnis physisch auf einem Remote-Server vorhanden ist, ich aber keine Netzwerkverbindung habe, auf der ich das Skript ausführe, isdir()kann ich sicher nicht wissen, ob das Verzeichnis vorhanden ist.
LarsH

Wenn Sie überprüfen, ob ein Verzeichnis in einem UNC-Pfad vorhanden ist, kann os.path.exists false zurückgeben, wenn es tatsächlich vorhanden ist (auch wenn die Verbindung funktioniert), aber os.path.isdir gibt den korrekten Wert zurück. Für eine Datei im einfachen UNC-Pfad sollten Sie aus demselben Grund auch os.path.isfile anstelle von os.path.exists verwenden.
Miigotu

0

os.path.exists (path) Gibt True zurück, wenn path auf einen vorhandenen Pfad verweist. Ein vorhandener Pfad können reguläre Dateien ( http://en.wikipedia.org/wiki/Unix_file_types#Regular_file ), aber auch spezielle Dateien (z. B. ein Verzeichnis) sein. Im Wesentlichen gibt diese Funktion also true zurück, wenn der angegebene Pfad in irgendeiner Form im Dateisystem vorhanden ist (ungeachtet einiger Ausnahmen wie fehlerhafter Symlinks).

os.path.isdir (Pfad) gibt wiederum nur true zurück, wenn der Pfad auf ein Verzeichnis verweist


1
Dies beantwortet nicht wirklich die Frage des OP, wer nach Unterschieden zwischen den beiden Befehlen fragt. Sie haben nur eine detailliert.
Esqew
Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.