Python 中如何安全地创建多级(嵌套)目录?

Python 创建嵌套目录推荐 pathlib 的 mkdir(parents=True, exist_ok=True),不会逐级报错也不会因目录已存在而抛异常。本文对比 pathlib 与 os.makedirs 的用法。

最佳实践
Python 中如何安全地创建多级(嵌套)目录?封面

推荐写法:Path('/a/b/c').mkdir(parents=True, exist_ok=True)parents=True 自动创建缺失的父目录,exist_ok=True 让目录已存在时不报错,两个参数配合起来就是"安全创建"。

方法一:pathlib(Python 3.5+,推荐)

from pathlib import Path

p = Path('/root/directory/nested_directory')
p.mkdir(parents=True, exist_ok=True)
  • 不加 parents=True:父目录不存在会抛 FileNotFoundError
  • 不加 exist_ok=True:目标已存在会抛 FileExistsError

方法二:os.makedirs

import os

os.makedirs('/root/directory/nested_directory', exist_ok=True)

效果相同。注意 Python 3.2 之前 os.makedirs 没有 exist_ok 参数,需要手动判断 os.path.exists(),存在竞态问题(判断和创建之间目录可能被其他进程创建),所以现代代码应始终用 exist_ok=True

常见错误写法

# 错误:先判断再创建,存在竞态条件
if not os.path.exists(path):
    os.makedirs(path)

正确姿势就是一句带 exist_ok=True 的调用,原子地完成"不存在才创建"。

常见问题(FAQ)

Q:mkdir 和 makedirs 有什么区别?
A:Path.mkdir() 默认只创建最后一级;os.makedirs() 默认递归创建所有缺失层级。加上 parents=True 后两者行为一致。

Q:创建时想顺便设置权限?
A:两个函数都有 mode 参数(如 mode=0o755),但注意最终权限还受 umask 影响,且中间层目录不应用该 mode。

Q:相对路径可以吗?
A:可以,相对当前工作目录解析。生产代码建议用绝对路径或基于 __file__ 定位,避免启动目录不同导致行为不一致。

获取专属方案

联系我们

加入社区

微信扫码
加入官方交流群

立即体验

在线开通,按量计费,真正的云服务!

立即开始

选择观测云版本

代码托管平台