
在Python≥3.5上,使用
pathlib.Path.mkdir:
from pathlib import PathPath("/my/directory").mkdir(parents=True, exist_ok=True)对于较旧的Python版本,我看到两个质量不错的答案,每个答案都有一个小缺陷,因此我将对此进行说明:
试试看
os.path.exists,然后考虑
os.makedirs创建。
import osif not os.path.exists(directory): os.makedirs(directory)
如注释和其他地方所述,这是一个竞争条件–如果在
os.path.exists和
os.makedirs调用之间创建目录,
os.makedirs则将失败并显示
OSError。不幸的是,毯式捕获OSError和继续 *** 作并非万无一失,因为它会忽略由于其他因素(例如权限不足,磁盘已满等)而导致的目录创建失败。
一种选择是捕获OSError并检查嵌入式错误代码(请参阅是否存在从Python的OSError获取信息的跨平台方法):
import os, errnotry: 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.欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)