如何检查目录是否存在?
当前回答
如果目录不在,您可能还想创建该目录。
来源,如果它还在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.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
仅对目录使用os.path.isdir:
>>> import os
>>> os.path.isdir('new_folder')
True
对文件和目录使用os.path.exists:
>>> import os
>>> os.path.exists(os.path.join(os.getcwd(), 'new_folder', 'file.txt'))
False
或者,您可以使用pathlib:
>>> from pathlib import Path
>>> Path('new_folder').is_dir()
True
>>> (Path.cwd() / 'new_folder' / 'file.txt').exists()
False
两件事
检查目录是否存在?如果没有,则创建一个目录(可选)。
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")
是的,使用os.path.exists()。
如:
In [3]: os.path.exists('/d/temp')
Out[3]: True
很可能会在一条os.path.isdir(…)中抛出。
推荐文章
- 如何以编程方式获取python.exe位置?
- 如何跳过循环中的迭代?
- 如何在Android工作室添加“libs”文件夹?
- 使用Pandas为字符串列中的每个值添加字符串前缀
- ImportError:没有名为matplotlib.pyplot的模块
- 在python中遍历对象属性
- 如何在Python中使用方法重载?
- 在Python中提取文件路径(目录)的一部分
- Crontab -在目录中运行
- 如何安装没有根访问权限的python模块?
- 尝试模拟datetime.date.today(),但不工作
- 将行添加到数组
- 如何在Python中直接获得字典键作为变量(而不是通过从值搜索)?
- Python:为什么functools。部分有必要吗?
- 如何用python timeit对代码段进行性能测试?