makedirs - 递归目录创建

给定具有以下内容的本地目录:

 └── dir1
     ├── subdir1
     └── subdir2

我们想在新目录 dir2 下创建相同的 subdir1,subdir2,它目前还不存在。

import os

os.makedirs("./dir2/subdir1")
os.makedirs("./dir2/subdir2")

运行此结果

├── dir1
│   ├── subdir1
│   └── subdir2
└── dir2
    ├── subdir1
    └── subdir2

dir2 仅在第一次需要时创建,用于 subdir1 的创建。

如果我们使用了 os.mkdir ,我们就会遇到异常,因为 dir2 还不存在。

    os.mkdir("./dir2/subdir1")
OSError: [Errno 2] No such file or directory: './dir2/subdir1'

如果目标目录已存在,os.makedirs 将不喜欢它。如果我们再次重新运行它:

OSError: [Errno 17] File exists: './dir2/subdir1'

但是,通过捕获异常并检查目录是否已创建,可以轻松解决此问题。

try:
    os.makedirs("./dir2/subdir1")
except OSError:
    if not os.path.isdir("./dir2/subdir1"):
        raise

try:
    os.makedirs("./dir2/subdir2")
except OSError:
    if not os.path.isdir("./dir2/subdir2"):
        raise