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.

user1834048
quelle

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.

Pavel Anossov
quelle
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.

Fredrick Brennan
quelle
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.

Manoz
quelle
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.

kiriloff
quelle
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

Jan Kunigk
quelle
1
Dies beantwortet nicht wirklich die Frage des OP, wer nach Unterschieden zwischen den beiden Befehlen fragt. Sie haben nur eine detailliert.
Esqew