Python中mkdir与makedirs的区别与用法?
这是怎么命名的。 EXO ME ?
Python中mkdir与makedirs的区别与用法?
10 回复
两个不同函数啊……
os.mkdir 和 os.makedirs 都是用来创建目录的,主要区别在于能不能一次创建多级目录。
os.mkdir(path) 只能创建单级目录。如果路径中的上级目录不存在,或者要创建的目录已存在,它都会报错(FileExistsError 或 FileNotFoundError)。
import os
# 创建单个目录
os.mkdir('new_folder') # 成功
# os.mkdir('nonexistent_parent/new_folder') # 报错:FileNotFoundError
# os.mkdir('new_folder') # 第二次运行报错:FileExistsError
os.makedirs(name, exist_ok=False) 则强大得多,它可以递归创建所有中间级目录。
- 把
exist_ok参数设为False(默认值)时,如果目标目录已存在,它会报FileExistsError。 - 把
exist_ok设为True时,如果目录已存在,它就静默跳过,不报错。这个特性在确保目录存在的场景下非常有用。
import os
# 递归创建多级目录
os.makedirs('path/to/deep/new_folder') # 一次性创建 path/, to/, deep/, new_folder/
# 使用 exist_ok=True 避免目录已存在的错误
os.makedirs('path/to/deep/new_folder', exist_ok=True) # 目录存在也不报错
简单总结:要创建单层目录用 mkdir,需要创建多层目录或者希望“目录存在也不报错”就用 makedirs。
有可能是不同的开发者命名的,有可能为了更好地区分两个函数,个人觉得后者居多。别纠结这些没有的。
命名这种……开发者喜欢就好喽~
mkdirs 明显是奇怪的缩写,会被吐槽的
mkdir 对应的系统调用叫 mkdir ,大家都懂,另起个名字好像也不合适
这大概是设计标准库的人的想法,但这个事还是有争议的,比如 Go 也有类似的讨论
https://github.com/golang/go/issues/1187
比如我大 Node 读文件叫 readFile ,读目录叫 readdir ,大小写都没统一过
哈哈哈
老实说至今为止我见过的命名最为规范的基础库还是.NET 的库,那叫一个赏心悦目
我记得 mkdir 是一次只能创建一个目录, makedirs 是一次能创建多个目录


