плюси і мінуси між 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повертається для мене істинним на символічному посиланні.
Каз

Я os.path.isdir('.ipynb_checkpoints')повертаюся правдою
Маленькі Боббі Таблиці

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

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 (path) Повертає значення True, якщо шлях посилається на існуючий шлях. Існуючий шлях може бути звичайними файлами ( http://en.wikipedia.org/wiki/Unix_file_types#Regular_file ), а також спеціальні файли (наприклад, каталог). Отже, по суті, ця функція повертає true, якщо вказаний шлях існує у файловій системі в будь-якій формі (незважаючи на кілька винятків, таких як непрацюючі символічні посилання).

os.path.isdir (шлях), у свою чергу, поверне значення true лише тоді, коли шлях вказує на каталог


1
Це насправді не відповідає на питання OP, хто просить розбіжностей між двома командами. У вас є лише детальний.
esqew
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.