os.path.exists与os.path.isdir之间的优缺点


78

我正在检查是否存在目录,但是我注意到我正在使用os.path.exists而不是os.path.isdir。两者都很好,但是我很好奇使用isdir代替的优势exists

Answers:


131

os.path.existsTrue如果存在具有该名称的常规文件,也将返回。

os.path.isdirTrue当该路径存在且为目录或指向目录的符号链接时才返回。


1
os.path.isdir在符号链接上为我返回true。
卡兹(Kaz),

我正在os.path.isdir('.ipynb_checkpoints')回归真实
Little Bobby

在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 2014年

如果要检查UNC路径上是否存在目录,则os.path.exists实际存在时(即使连接正常)也可以返回false,但是os.path.isdir将返回正确的值。对于类似UNC路径情况下的文件,出于相同的原因,您还应该使用os.path.isfile而不是os.path.exists。
miigotu

0

os.path.exists(path)如果path引用现有路径,则返回True。现有路径可以是常规文件(http://en.wikipedia.org/wiki/Unix_file_types#Regular_file),也可以是特殊文件(例如目录)。因此,从本质上讲,如果提供的路径以任何形式存在于文件系统中,则此函数将返回true(尽管有一些异常情况,例如断开的符号链接)。

os.path.isdir(path)仅在路径指向目录时才返回true


1
这并不能真正回答OP的问题,谁在要求这两个命令之间的差异。您只详细介绍了一个。
esqew 2014年
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.