плюсы и минусы между os.path.exists и os.path.isdir


78

Я проверяю, существует ли каталог, но заметил, что использую os.path.existsвместо os.path.isdir. Оба работают нормально, но мне любопытно, каковы преимущества использования isdirвместо них exists.

Ответы:


131

os.path.existsтакже вернется, Trueесли есть обычный файл с таким именем.

os.path.isdirвернется только в том Trueслучае, если этот путь существует и является каталогом или символической ссылкой на каталог.


1
os.path.isdirвозвращается для меня по символической ссылке.
Kaz

Я os.path.isdir('.ipynb_checkpoints')возвращаюсь к истине
Little Bobby Tables

В Python 2.7 os.path.isdir возвращает true для символических ссылок на каталоги и false для символических ссылок на файлы (как и ожидалось). Однако это может вызвать проблемы с os.rmdir, потому что он не сможет выполнить символическую ссылку, даже если это символическая ссылка на каталог.
Halsafar

6

Точно так же, как это звучит так: если путь существует, но является файлом, а не каталогом, isdirвернется False. Между тем existsвернется Trueв обоих случаях.


2

os.path.isdir () проверяет, существует ли путь и является ли он каталогом, и возвращает TRUE для случая.

Точно так же os.path.isfile () проверяет, существует ли путь и является ли он файлом, и возвращает TRUE для случая.

Кроме того, os.path.exists () проверяет, существует ли путь, и не заботится о том, указывает ли путь на файл или каталог, и возвращает TRUE в любом из случаев.


0

В большинстве случаев это одно и то же.

Но путь может существовать физически, тогда как path.exists()возвращает False. Это тот случай, если os.stat () возвращает значение False для этого файла.

Если путь существует физически, path.isdir()всегда будет возвращать значение True. Это не зависит от платформы.


Непонятно, что означает этот последний абзац. Если каталог физически существует на удаленном сервере, но у меня нет сетевого подключения, где я запускаю скрипт, то, конечно, я isdir()не могу знать, существует ли каталог.
LarsH

Если вы проверяете, существует ли каталог на пути UNC, os.path.exists может вернуть false, когда он действительно существует (даже при работающем соединении), но os.path.isdir вернет правильное значение. Для файла в случае простого пути UNC вы также должны использовать os.path.isfile вместо os.path.exists по той же причине.
miigotu

0

os.path.exists (путь) Возвращает True, если путь относится к существующему пути. Существующий путь может быть обычными файлами ( http://en.wikipedia.org/wiki/Unix_file_types#Regular_file ), так и специальными файлами (например, каталогом). По сути, эта функция возвращает истину, если указанный путь существует в файловой системе в какой-либо форме (несмотря на несколько исключений, таких как неработающие символические ссылки).

os.path.isdir (path), в свою очередь, вернет true только тогда, когда путь указывает на каталог


1
На самом деле это не отвечает на вопрос ОП, который спрашивает о различиях между двумя командами. У вас есть только один.
esqew
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.