协慌网

登录 贡献 社区

Python 中的 mkdir -p 功能

有没有一种方法可以从 Python 内部在外壳上获得类似于mkdir -p功能。我正在寻找系统调用以外的解决方案。我确定代码少于 20 行,并且我想知道是否有人已经编写了它?

答案

对于pathlib.Path.mkdir ,请使用pathlib.Path.mkdir

import pathlib
pathlib.Path("/tmp/path/to/desired/directory").mkdir(parents=True, exist_ok=True)

在 Python 3.5 中添加了exist_ok参数。

对于 3.2 或os.makedirs Python, os.makedirs具有可选的第三个参数exist_ok ,当为True ,启用mkdir -p功能 - 除非提供了mode且现有目录的权限与预期的权限不同;在这种情况下, OSError会像以前一样引发:

import os
os.makedirs("/tmp/path/to/desired/directory", exist_ok=True)

对于更旧的 Python 版本,您可以使用os.makedirs并忽略该错误:

import errno    
import os

def mkdir_p(path):
    try:
        os.makedirs(path)
    except OSError as exc:  # Python ≥ 2.5
        if exc.errno == errno.EEXIST and os.path.isdir(path):
            pass
        else:
            raise

在 Python> = 3.2 中,这就是

os.makedirs(path, exist_ok=True)

在早期版本中,使用@tzot 的 answer

这比捕获异常要容易得多:

import os
if not os.path.exists(...):
    os.makedirs(...)

免责声明此方法需要两个系统调用,在某些环境 / 条件下,它们更容易受到竞争条件的影响。如果您要编写的代码比在受控环境中运行的简单的一次性脚本要复杂的多,那么最好采用只需要一个系统调用的公认答案。

更新 2012-07-27

我很想删除此答案,但是我认为下面的评论主题有价值。因此,我正在将其转换为 Wiki。