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. 组合参数(最常用的安全写法)
三、关键注意事项
-
原路径对象不变:mkdir 是改磁盘的操作,不会改变 Path 对象本身。
-
权限问题:mode 在 Windows 上无效(Windows 权限由文件系统控制),仅 Linux/macOS 生效。
-
路径是文件时报错:若目标已存在且是文件(非目录),无论 exist_ok 是否为 True 都抛 FileExistsError。
-
空路径/非法路径:传空串或 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 生态(路径拼接、遍历)无缝衔接。