如何检查目录是否存在?


当前回答

仅提供os.stat版本(python 2):

import os, stat, errno
def CheckIsDir(directory):
  try:
    return stat.S_ISDIR(os.stat(directory).st_mode)
  except OSError, e:
    if e.errno == errno.ENOENT:
      return False
    raise

其他回答

以下代码检查代码中引用的目录是否存在,如果您的工作场所中不存在,则会创建一个:

import os

if not os.path.isdir("directory_name"):
    os.mkdir("directory_name")
#You can also check it get help for you

if not os.path.isdir('mydir'):
    print('new directry has been created')
    os.system('mkdir mydir')

是的,使用os.path.exists()。

如果目录不在,您可能还想创建该目录。

来源,如果它还在SO上。

=====================================================================

在Python≥3.5时,使用pathlib.Path.mkdir:

from pathlib import Path
Path("/my/directory").mkdir(parents=True, exist_ok=True)

对于旧版本的Python,我看到了两个质量很好的答案,每一个都有一个小缺陷,所以我将给出我的看法:

尝试os.path.exists,并考虑创建os.makedirs。

import os
if not os.path.exists(directory):
    os.makedirs(directory)

正如注释和其他地方所指出的,存在一个竞争条件——如果在os.path.exists和os.makedirs调用之间创建目录,os.makedir将失败,并出现OSError。不幸的是,全面捕获OSError并继续并不是万无一失的,因为它会忽略由于其他因素(如权限不足、磁盘已满等)导致的目录创建失败。

一种选择是捕获OSError并检查嵌入的错误代码(请参阅是否有跨平台的方式从Python的OSError获取信息):

import os, errno

try:
    os.makedirs(directory)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

或者,可以有第二个os.path.exists,但假设另一个在第一次检查之后创建了目录,然后在第二次检查之前删除了它,我们仍然可能被愚弄。

根据应用程序的不同,并发操作的危险可能大于或小于其他因素(如文件权限)造成的危险。在选择实现之前,开发人员必须更多地了解正在开发的特定应用程序及其预期环境。

现代版本的Python通过暴露FileExistsError(在3.3+中)大大改进了这段代码。。。

try:
    os.makedirs("path/to/directory")
except FileExistsError:
    # directory already exists
    pass

…并允许os.makedirs使用名为exist_ok的关键字参数(在3.2+中)。

os.makedirs("path/to/directory", exist_ok=True)  # succeeds even if directory exists.

os为您提供了许多这些功能:

import os
os.path.isdir(dir_in) #True/False: check if this is a directory
os.listdir(dir_in)    #gets you a list of all files and directories under dir_in

如果输入路径无效,listdir将抛出异常。