news 2026/7/8 21:34:35

python pathlib---.mkdir

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
python pathlib---.mkdir

在 Python 的 pathlib 模块中,.mkdir() 是 Path 对象最常用的目录创建方法。它对应传统 os 模块中的 os.mkdir() 和 os.makedirs(),但提供更统一、更安全的接口。

常见用法

1、创建单层目录

from pathlib import Path

p = Path("./new_folder")
p.mkdir()
# 前提:"./" 父目录必须存在;若 "new_folder" 已存在,则抛出 FileExistsError

2、递归创建多层目录

p = Path("./data/2026/07/reports")
p.mkdir(parents=True)
# 自动创建 data、2026、07 三层父目录(若不存在)
# 若 reports 已存在,抛出 FileExistsError

3、安全创建

p = Path("./logs/today")
p.mkdir(parents=True, exist_ok=True)
# 父目录自动创建 + 目录已存在也不报错

4、设置特定权限(Unix/Linux 环境)

p = Path("./private_data")
p.mkdir(mode=0o750)
# 创建目录,权限设为 rwxr-x---(所有者读写执行,组员读执行,其他人无权限)
# 注意:最终权限 = mode & ~umask(系统屏蔽位)

注意事项

1、parents=False

如果parents=False(默认值),而目标路径的父目录不存在,会直接抛出FileNotFoundError

p = Path("./a/b/c")
p.mkdir() # 若 ./a 或 ./a/b 不存在 → FileNotFoundError: [Errno 2] No such file or directory

(绝大多数场景下,请直接使用parents=True)

2、exist_ok=False 与并发风险

默认情况下,如果目录已存在会报错。

if not p.exists():
p.mkdir() # 存在竞态条件(TOCTOU)

在多线程或多进程环境下,可能在exists()检查通过后,另一个进程恰好创建了该目录,导致mkdir()崩溃。
正确做法:直接使用exist_ok=True,因为操作系统会在内核层面原子地处理“检查并创建”,比手动判断安全得多。

p.mkdir(parents=True, exist_ok=True) # 无惧并发

3、权限 (mode) 的实际效果受umask影响

在 Linux/macOS 中,即使设置了 mode=0o777,实际创建出的目录权限通常是 775 或 755,因为系统 umask(默认 022)会屏蔽掉组用户和其他用户的写权限。

# 即使代码写 777,实际权限可能是 755(如果 umask=022)
p.mkdir(mode=0o777)

若想强制精确权限,需在创建前调用os.umask(0)临时修改,但一般不推荐(会全局影响)。

4、Windows 下的权限行为

在 Windows 系统上,mode 参数被忽略,目录权限由 Windows 的 ACL(访问控制列表)和安全策略决定,不遵循 Unix 的八进制权限模型。

5、对符号链接(软链接)的行为

如果p是一个指向目录的符号链接,且链接已存在:

  • exist_ok=True时,不报错(视为目标目录存在)。

  • exist_ok=False时,抛出FileExistsError(即使它是个链接,也会拦截)。

6、与os.mkdir/os.makedirs的对应关系

总结:

新建目录,记住两个 True:绝大多数情况下,直接用 p.mkdir(parents=True, exist_ok=True),不必提前 if exists。

权限随系统:不要在 Windows 上依赖 mode;在 Linux 上若需要精确权限,优先用 os.chmod() 事后调整,而不是依赖 mode(因为 umask 干扰)。

不要用 exists() + mkdir() 组合,这是典型的竞态条件漏洞,直接用 exist_ok=True 替代。

路径是文件时请注意:mkdir() 只负责目录。若 p 已经是一个普通文件且 exist_ok=True,它仍会抛出 NotADirectoryError,因为无法用文件名创建同名目录。

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/7/8 21:34:23

Ohook:终极Office激活方案,3步永久解锁Microsoft 365完整功能

Ohook:终极Office激活方案,3步永久解锁Microsoft 365完整功能 【免费下载链接】ohook An universal Office "activation" hook with main focus of enabling full functionality of subscription editions 项目地址: https://gitcode.com/gh…

作者头像 李华
网站建设 2026/7/8 21:32:09

Windows 10/11 默认应用关联修复:5步命令行重置协议与文件关联

Windows 系统协议关联修复:命令行深度重置指南当系统默认应用关联出现混乱时,图形界面设置往往力不从心。本文将带您深入Windows系统底层,通过命令行工具彻底修复http、https等关键协议与.htm、.html等文件类型的关联问题。不同于常规的图形界…

作者头像 李华
网站建设 2026/7/8 21:30:17

MiniMax Hub集成Claude Code与自动化管线:AI开发工作流实战指南

🚀 30款热门AI模型一站整合,DeepSeek/GLM/Qwen 随心用,限时 5 折。 👉 点击领海量免费额度 在AI编程工具快速迭代的当下,开发者们经常面临一个现实问题:如何在不同的AI编程助手之间高效切换,…

作者头像 李华
网站建设 2026/7/8 21:28:10

Ubuntu 22.04 LTS 虚拟机安装:VMware 与 VirtualBox 双平台 8 步配置对比

Ubuntu 22.04 LTS 虚拟机安装:VMware 与 VirtualBox 双平台 8 步配置对比对于需要在隔离环境中运行 Ubuntu 的开发者和运维人员来说,虚拟机是最常用的解决方案之一。VMware Workstation 和 Oracle VirtualBox 作为两大主流虚拟化平台,各有其独…

作者头像 李华
网站建设 2026/7/8 21:27:35

YOLO训练超参数调优指南:10个关键参数详解与COCO数据集实测

YOLO训练超参数调优实战:从理论到COCO数据集验证1. 超参数调优的核心价值与挑战在目标检测模型的训练过程中,超参数调优往往是被低估却至关重要的环节。不同于模型架构创新需要深厚的理论基础,超参数优化更像是一门实践艺术——它直接决定了模…

作者头像 李华
网站建设 2026/7/8 21:26:25

Windows 10 自启动管理:5种方案横向评测与3个隐藏注册表路径详解

Windows 10 自启动管理:5种方案横向评测与3个隐藏注册表路径详解每次开机时那些自动跳出的软件弹窗是否让你感到烦躁?系统启动速度越来越慢的背后,往往隐藏着数十个自启动程序在悄悄消耗资源。对于追求效率的进阶用户而言,精准掌控…

作者头像 李华