mkdir 是 Python pathlib.Path 对象的核心方法,用于创建目录(文件夹),等价于操作系统的 mkdir 命令但封装得更易用。os 模块也有 os.mkdir()/os.makedirs(),本文重点讲 pathlib 版本并对比传统写法。

一、核心用法:Path.mkdir

参数说明:

参数 作用
mode 目录权限(仅类 Unix 有效),默认 0o777
parents 是否创建父目录:False(默认)父目录不存在则报错;True 递归创建所有不存在的父目录(等价 os.makedirs)
exist_ok 是否忽略“目录已存在”:False(默认)已存在抛 FileExistsError;True 已存在不报错

二、基础示例

1. 创建单个目录(父目录必须存在)

2. 递归创建多级目录(parents=True)

最常用:创建嵌套目录 ./docs/reports/2025,无需逐层建父目录。

3. 忽略“目录已存在”(exist_ok=True)

避免重复执行脚本时抛异常。

4. 组合参数(最常用的安全写法)

三、关键注意事项

  1. 原路径对象不变:mkdir 是改磁盘的操作,不会改变 Path 对象本身。

  2. 权限问题:mode 在 Windows 上无效(Windows 权限由文件系统控制),仅 Linux/macOS 生效。

  3. 路径是文件时报错:若目标已存在且是文件(非目录),无论 exist_ok 是否为 True 都抛 FileExistsError。

  4. 空路径/非法路径:传空串或 Windows 非法字符(:*?"<>|)会抛 ValueError 或 OSError。

四、与 os 模块的对比

pathlib 写法 os 模块写法
Path(“data”).mkdir() os.mkdir(“data”)
Path(“a/b/c”).mkdir(parents=True) os.makedirs(“a/b/c”)
Path(“data”).mkdir(exist_ok=True) os.makedirs(“data”, exist_ok=True)

结论:pathlib 写法更面向对象、语义更清晰,推荐优先使用。

五、实用场景

场景 1:脚本启动时批量建必要目录

场景 2:创建前手动检查是否存在

总结

Path.mkdir() 是创建目录的首选,核心参数 parents=True(递归创建)和 exist_ok=True(忽略已存在)几乎覆盖所有常规场景,比 os.mkdir/os.makedirs 更简洁易读,并与 pathlib 生态(路径拼接、遍历)无缝衔接。