python pathlib---.mkdir

📅 2026/7/8 21:34:49
python pathlib---.mkdir
在 Python 的 pathlib 模块中.mkdir() 是 Path 对象最常用的目录创建方法。它对应传统 os 模块中的 os.mkdir() 和 os.makedirs()但提供更统一、更安全的接口。常见用法1、创建单层目录from pathlib import Pathp Path(./new_folder)p.mkdir()# 前提./ 父目录必须存在若 new_folder 已存在则抛出 FileExistsError2、递归创建多层目录p Path(./data/2026/07/reports)p.mkdir(parentsTrue)# 自动创建 data、2026、07 三层父目录若不存在# 若 reports 已存在抛出 FileExistsError3、安全创建p Path(./logs/today)p.mkdir(parentsTrue, exist_okTrue)# 父目录自动创建 目录已存在也不报错4、设置特定权限Unix/Linux 环境p Path(./private_data)p.mkdir(mode0o750)# 创建目录权限设为 rwxr-x---所有者读写执行组员读执行其他人无权限# 注意最终权限 mode ~umask系统屏蔽位注意事项1、parentsFalse时如果parentsFalse默认值而目标路径的父目录不存在会直接抛出FileNotFoundError。p Path(./a/b/c)p.mkdir() # 若 ./a 或 ./a/b 不存在 → FileNotFoundError: [Errno 2] No such file or directory(绝大多数场景下请直接使用parentsTrue)2、exist_okFalse 与并发风险默认情况下如果目录已存在会报错。if not p.exists():p.mkdir() # 存在竞态条件TOCTOU在多线程或多进程环境下可能在exists()检查通过后另一个进程恰好创建了该目录导致mkdir()崩溃。正确做法直接使用exist_okTrue因为操作系统会在内核层面原子地处理“检查并创建”比手动判断安全得多。p.mkdir(parentsTrue, exist_okTrue) # 无惧并发3、权限 (mode) 的实际效果受umask影响在 Linux/macOS 中即使设置了 mode0o777实际创建出的目录权限通常是 775 或 755因为系统 umask默认 022会屏蔽掉组用户和其他用户的写权限。# 即使代码写 777实际权限可能是 755如果 umask022p.mkdir(mode0o777)若想强制精确权限需在创建前调用os.umask(0)临时修改但一般不推荐会全局影响。4、Windows 下的权限行为在 Windows 系统上mode 参数被忽略目录权限由 Windows 的 ACL访问控制列表和安全策略决定不遵循 Unix 的八进制权限模型。5、对符号链接软链接的行为如果p是一个指向目录的符号链接且链接已存在当exist_okTrue时不报错视为目标目录存在。当exist_okFalse时抛出FileExistsError即使它是个链接也会拦截。6、与os.mkdir/os.makedirs的对应关系总结新建目录记住两个 True绝大多数情况下直接用 p.mkdir(parentsTrue, exist_okTrue)不必提前 if exists。权限随系统不要在 Windows 上依赖 mode在 Linux 上若需要精确权限优先用 os.chmod() 事后调整而不是依赖 mode因为 umask 干扰。不要用 exists() mkdir() 组合这是典型的竞态条件漏洞直接用 exist_okTrue 替代。路径是文件时请注意mkdir() 只负责目录。若 p 已经是一个普通文件且 exist_okTrue它仍会抛出 NotADirectoryError因为无法用文件名创建同名目录。