wady i zalety między os.path.exists a os.path.isdir

78

Sprawdzam, czy katalog istnieje, ale zauważyłem, że os.path.existszamiast niego używam os.path.isdir. Oba działają dobrze, ale jestem ciekawy, jakie są zalety używania isdirzamiast exists.

user1834048
źródło

Odpowiedzi:

131

os.path.existszwróci również, Truejeśli istnieje zwykły plik o tej nazwie.

os.path.isdirzwróci tylko Truewtedy, gdy ścieżka istnieje i jest katalogiem lub dowiązaniem symbolicznym do katalogu.

Pavel Anossov
źródło
1
os.path.isdirzwraca prawdę na dowiązaniu symbolicznym.
Kaz
Wracam os.path.isdir('.ipynb_checkpoints')prawdziwie
Little Bobby Tables
W Pythonie 2.7 os.path.isdir zwraca wartość true dla dowiązań symbolicznych do katalogów i false dla dowiązań symbolicznych do plików (zgodnie z oczekiwaniami). Może to jednak powodować problemy z os.rmdir, ponieważ nie powiedzie się na dowiązaniu symbolicznym, nawet jeśli jest to dowiązanie symboliczne do katalogu.
Halsafar
6

Tak jak to brzmi: jeśli ścieżka istnieje, ale jest plikiem, a nie katalogiem, isdirzwróci False. Tymczasem existspowróci Truew obu przypadkach.

Fredrick Brennan
źródło
2

os.path.isdir () sprawdza, czy ścieżka istnieje i czy jest katalogiem i zwraca wartość TRUE dla przypadku.

Podobnie os.path.isfile () sprawdza, czy ścieżka istnieje i jest plikiem, i zwraca wartość TRUE dla sprawy.

Ponadto os.path.exists () sprawdza, czy ścieżka istnieje i nie dba o to, czy ścieżka wskazuje na plik lub katalog i zwraca wartość TRUE w każdym z przypadków.

Manoz
źródło
0

Przez większość czasu jest tak samo.

Ale ścieżka może istnieć fizycznie, podczas gdy path.exists()zwraca False. Dzieje się tak, jeśli os.stat () zwraca False dla tego pliku.

Jeśli ścieżka istnieje fizycznie, path.isdir()zawsze zwróci True. To nie zależy od platformy.

kiriloff
źródło
Nie jest jasne, co oznacza ten ostatni akapit. Jeśli katalog istnieje fizycznie na zdalnym serwerze, ale nie mam połączenia sieciowego, w którym uruchamiam skrypt, z pewnością isdir()nie mogę wiedzieć, czy katalog istnieje.
LarsH
Jeśli sprawdzasz, czy katalog istnieje w ścieżce UNC, os.path.exists może zwrócić false, jeśli faktycznie istnieje (nawet przy działającym połączeniu), ale os.path.isdir zwróci poprawną wartość. Z tego samego powodu w przypadku pliku o podobnej ścieżce UNC należy również użyć os.path.isfile zamiast os.path.exists.
miigotu
0

os.path.exists (path) Zwraca wartość True, jeśli ścieżka odnosi się do istniejącej ścieżki. Istniejąca ścieżka może być zwykłymi plikami ( http://en.wikipedia.org/wiki/Unix_file_types#Regular_file ), ale także plikami specjalnymi (np. Katalogiem). W istocie ta funkcja zwraca prawdę, jeśli podana ścieżka istnieje w systemie plików w jakiejkolwiek formie (niezależnie od kilku wyjątków, takich jak uszkodzone dowiązania symboliczne).

Z kolei os.path.isdir (path) zwróci wartość true tylko wtedy, gdy ścieżka wskazuje na katalog

Jan Kunigk
źródło
1
To tak naprawdę nie odpowiada na pytanie OP, który prosi o różnice między dwoma poleceniami. Masz tylko jeden szczegółowy.
esqew,