栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

Pyrhon-如何安全地创建嵌套目录?

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Pyrhon-如何安全地创建嵌套目录?

在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.


转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/393794.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号