在Python的os
模块中,有没有办法找到目录是否存在,例如:
>>> os.direxists(os.path.join(os.getcwd()), 'new_folder')) # in pseudocode
True/False
答案 0 :(得分:1471)
如果您不关心它是文件还是目录,您正在寻找os.path.isdir
或os.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.exists
和os.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
。区别在于它将每个路径都视为字符串(Path
是str
的子类),因此,如果某些函数需要字符串,则可以轻松地将其传递给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)
两件事
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")