如何检查Python中是否存在目录?

如何检查目录是否存在?

1411855 次浏览

使用#0

仅对目录使用#0

>>> import os>>> os.path.isdir('new_folder')True

对文件和目录都使用#0

>>> import os>>> os.path.exists(os.path.join(os.getcwd(), 'new_folder', 'file.txt'))False

或者,您可以使用#0

 >>> from pathlib import Path>>> Path('new_folder').is_dir()True>>> (Path.cwd() / 'new_folder' / 'file.txt').exists()False

如:

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

可能会抛出一个os.path.isdir(...)来确定。

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

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

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

如果输入路径无效,listdir将引发异常。

只是为了提供os.stat版本(python 2):

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

Python 3.4在标准库中引入了#0模块,它提供了一种面向对象的方法来处理文件系统路径。Path对象的is_dir()exists()方法可用于回答以下问题:

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]: qOut[6]: PosixPath('/usr/bin/vim')
In [7]: q.exists()Out[7]: True
In [8]: q.is_dir()Out[8]: False

Pathlib也可以通过PyPi上的Pathlib2模块。在Python 2.7上使用

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

我们可以检查2个内置函数

os.path.isdir("directory")

它将给布尔值true指定的目录是可用的。

os.path.exists("directoryorfile")

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

检查路径是否为目录;

os.path.isdir("directorypath")

如果路径是目录,则为布尔值true

有一个方便的#0模块。

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

您可能需要的其他相关内容:

>>> Path('/var/log/system.log').parentPath('/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.pyBASE_DIR = Path(__file__).ancestor(2)STATIC_ROOT = BASE_DIR + '/tmp/static'

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

来源,如果它还在SO上。

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

在Python≥3.5上,使用#0

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

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

尝试#0,并考虑#1的创作。

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

正如注释和其他地方所指出的,有一个竞争条件-如果目录是在os.path.existsos.makedirs调用之间创建的,os.makedirs将以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通过公开#0(在3.3+中)大大改进了这段代码…

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

…并允许#0的关键字参数称为#1(在3.2+中)。

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

有两件事

  1. 检查目录是否存在?
  2. 如果没有,则创建一个目录(可选)。
import osdirpath = "<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")

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

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

第1步:导入os.path模块
在运行代码之前导入os.path模块。

import os.pathfrom os import path

第2步:使用path.exists()函数
path.exists()方法用于查找文件是否存在。

path.exists("your_file.txt")

第3步:使用os.path.isfile()
我们可以使用isfile命令来确定给定的输入是否是文件。

path.isfile('your_file.txt')

第4步:使用os.path.isdir()
我们可以使用os.path.dir()函数来确定给定的输入是否是目录。

path.isdir('myDirectory')

这里是完整的代码

    import os.pathfrom os import path    
def main():    
print ("File exists:"+str(path.exists('your_file.txt')))print ("Directory exists:" + str(path.exists('myDirectory')))print("Item is a file: " + str(path.isfile("your_file.txt")))print("Item is a directory: " + str(path.isdir("myDirectory")))    
if __name__== "__main__":main()

pathlibPath.exists()对于Python 3.4

Pathlib模块包含在Python 3.4及更高版本中,用于处理文件系统路径。Python使用面向对象技术检查文件夹是否存在。

import pathlibfile = pathlib.Path("your_file.txt")if file.exists ():print ("File exist")else:print ("File not exist")
  • os.path.exists()-如果路径或目录确实存在,则返回True。
  • os.path.isfile()-如果path为File,则返回True。
  • os.path.isdir()-如果path是Directory,则返回True。
  • pathlib.Path.exists()-如果路径或目录确实存在,则返回True。(在Python 3.4及以上版本中)

文章引用如何检查Python中是否存在目录?