如何查找Python中是否存在目录

时间:2012-01-19 21:03:20

标签: python directory

在Python的os模块中,有没有办法找到目录是否存在,例如:

>>> os.direxists(os.path.join(os.getcwd()), 'new_folder')) # in pseudocode
True/False

14 个答案:

答案 0 :(得分:1471)

如果您不关心它是文件还是目录,您正在寻找os.path.isdiros.path.exists

示例:

import os
print(os.path.isdir("/home/el"))
print(os.path.exists("/home/el/myfile.txt"))

答案 1 :(得分:67)

如此接近!如果传入当前存在的目录的名称,os.path.isdir将返回True。如果它不存在或者不是目录,则返回False

答案 2 :(得分:36)

Python 3.4将the pathlib module引入标准库,它提供了一种面向对象的方法来处理文件系统路径:

In [1]: from pathlib import Path

In [2]: p = Path('/usr')

In [3]: p.exists()
Out[3]: True

In [4]: p.is_dir()
Out[4]: True

In [5]: q = p / 'bin' / 'vim'

In [6]: q.exists()
Out[6]: True

In [7]: q.is_dir()
Out[7]: False

Pathlib也可以通过the pathlib2 module on PyPi.

在Python 2.7上使用

答案 3 :(得分:33)

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

答案 4 :(得分:16)

答案 5 :(得分:16)

我们可以查看2个内置功能

os.path.isdir("directory")

如果指定的目录可用,它将给出布尔值true。

os.path.exists("directoryorfile")

如果指定的目录或文件可用,它将给予boolead true。

检查路径是否为目录;

os.path.isdir("directorypath")

如果路径是目录

将给出布尔值true

答案 6 :(得分:10)

如:

In [3]: os.path.exists('/d/temp')
Out[3]: True

可能会投入os.path.isdir(...)以确定。

答案 7 :(得分:8)

只提供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

答案 8 :(得分:7)

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将抛出异常。

答案 9 :(得分:5)

#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')

答案 10 :(得分:4)

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

Source,如果它仍在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.existsos.makedirs调用之间创建目录,则os.makedirs将失败,并显示一个{{1} }。不幸的是,毯式捕获OSError并不能保证万无一失,因为它会忽略由于其他因素(例如权限不足,磁盘已满等)而导致的目录创建失败。

一种选择是捕获OSError并检查嵌入的错误代码(请参见Is there a cross-platform way of getting information from Python’s OSError):

OSError

或者,可能还有第二个import os, errno try: os.makedirs(directory) except OSError as e: if e.errno != errno.EEXIST: raise ,但是假设另一个在第一次检查之后创建了目录,然后在第二次检查之前将其删除了–我们仍然可能会被愚弄。

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

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

os.path.exists

...并允许a keyword argument to os.makedirs called exist_ok(在3.2+中)。

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

答案 11 :(得分:3)

有一个方便的Unipath模块。

>>> from unipath import Path 
>>>  
>>> Path('/var/log').exists()
True
>>> Path('/var/log').isdir()
True

您可能需要的其他相关事项:

>>> Path('/var/log/system.log').parent
Path('/var/log')
>>> Path('/var/log/system.log').ancestor(2)
Path('/var')
>>> Path('/var/log/system.log').listdir()
[Path('/var/foo'), Path('/var/bar')]
>>> (Path('/var/log') + '/system.log').isfile()
True

您可以使用pip安装它:

$ pip3 install unipath

它类似于内置的pathlib。区别在于它将每个路径都视为字符串(Pathstr的子类),因此,如果某些函数需要字符串,则可以轻松地将其传递给Path对象,而无需需要将其转换为字符串。

例如,这在Django和settings.py上非常有用:

# settings.py
BASE_DIR = Path(__file__).ancestor(2)
STATIC_ROOT = BASE_DIR + '/tmp/static'

答案 12 :(得分:3)

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

import os

if not os.path.isdir("directory_name"):
    os.mkdir("directory_name")

答案 13 :(得分:0)

两件事

  1. 检查目录是否存在?
  2. 如果没有,请创建目录(可选)。
import os
dirpath = "<dirpath>" # Replace the "<dirpath>" with actual directory path.

if os.path.exists(dirpath):
   print("Directory exist")
else: #this is optional if you want to create a directory if doesn't exist.
   os.mkdir(dirpath):
   print("Directory created")