一文理解 Python 编程语言中的 os.makedirs() 方法
一文理解 Python 编程语言中的 os.makedirs() 方法
🍉 CSDN 叶庭云:https://yetingyun.blog.csdn.net/
本博客将为您详细介绍 Python 中的 os.makedirs(folder_name, exist_ok=True) 方法的基本使用和进阶使用方式,力求解释得既详尽又易于理解。

一、os.makedirs() 方法概述
1. os 模块简介
在 Python 中,os 模块提供了一系列与操作系统交互的功能,例如文件和目录的操作。要使用这些功能,首先需要导入 os 模块:
import os
2. os.makedirs() 方法的作用
os.makedirs() 方法用于递归地创建目录,即能一次性创建多级目录,无需逐级创建。
二、基本使用方式
1. 语法
os.makedirs(name, mode=0o777, exist_ok=False)
name:必要参数,要创建的目标目录路径,字符串类型,可以是相对路径或绝对路径。mode:可选参数,设置目录权限,默认是0o777(八进制表示)。exist_ok:可选参数,布尔值。若为False,当目标目录已存在时会抛出异常;若为True,则不会抛出异常。
注意:
- 请注意,mkdir 命令只能创建一个目录,无法递归创建目录。例如,在尝试创建 ./two/three 目录时,必须确保 ./two 目录已存在,否则会出现错误。另外,如果目标目录已经存在,mkdir 命令也会创建失败。
- makedirs 可以递归的创建目录,例如目录 ./two/three,即使没有 ./two 目录,也可以创建成功。如果希望目录存在的时候也不报错,设置参数
exist_ok=True
2. 示例
示例 1:创建单级目录
import os
os.makedirs('my_folder')
这将在当前工作目录下创建一个名为 my_folder 的文件夹。
示例 2:创建多级目录
import os
os.makedirs('parent_folder/child_folder/grandchild_folder')
这将递归地创建三个目录:parent_folder、child_folder 以及 grandchild_folder。
示例 3:使用 exist_ok=True
import os
os.makedirs('my_folder', exist_ok=True)
如果 my_folder 已经存在,程序将会继续执行而不会抛出异常。然而,如果不设置 exist_ok=True,则会触发 FileExistsError 异常。
三、参数详解
1. exist_ok 参数
- 默认值:
False - 作用:控制在目标目录已存在时的行为。
False:目录已存在时抛出FileExistsError异常。True:目录已存在时不抛出异常,程序继续执行。
示例
import os
# 目录已存在,抛出异常。
os.makedirs('existing_folder') # FileExistsError
# 目录已存在,不抛出异常。
os.makedirs('existing_folder', exist_ok=True) # 正常执行
2. mode 参数
- 默认值:
0o777 - 作用:设置新创建目录的权限。
- 注意:在某些操作系统(如 Windows)上,
mode参数可能会被忽略。
在 Linux 系统中,文件和目录的权限通过数字表示。这一数字系统基于三种基本权限:读(4)、写(2)和执行(1)。这些权限分配给三种用户类别:拥有者、群组和其他人。表示文件或目录权限时,我们使用三个数字,每个数字代表一种用户类别的权限。第一个数字代表拥有者的权限,第二个代表群组的权限,第三个代表其他人的权限。
每个数字通过将对应权限值相加得到。例如,若文件的拥有者可以读和写但不能执行,则权限数字为 4+2=6。若群组成员只能读,则权限数字为 4。若其他人无任何权限,则权限数字为 0。若文件权限设置为 “764”,意味着拥有者有读、写和执行权限(共 7),群组成员有读和写权限(共 6),其他人只有读权限(4)。默认情况下,新创建的文件或目录通常被赋予 “777” 权限,即所有人都可以读、写和执行。但出于安全考虑,通常会根据需要调整权限,限制对文件和目录的访问。
示例
import os
# 创建一个目录并将其权限设置为 764
os.makedirs('my_secure_folder', mode=0o764)
四、进阶使用方式
1. 创建目录前检查是否存在
虽然可以使用 exist_ok=True,但有时候,我们仍需要明确检查某个目录是否存在。
import os
if not os.path.exists('my_folder'):
os.makedirs('my_folder')
2. 捕获异常处理错误
在创建目录的过程中,您可能会遇到诸如权限不足或指定路径错误等问题。建议使用 try...except 来捕获异常。
import os
try:
os.makedirs('my_folder')
except FileExistsError:
print('目录已存在')
except PermissionError:
print('权限不足,无法创建目录')
except Exception as e:
print(f'发生未知错误:{e}')
3. 与 os.path 配合使用
使用 os.path.join() 方法可以确保文件路径在不同的操作系统下都能正确解析,从而提高代码的可移植性和兼容性。
import os
folder_path = os.path.join('parent_folder', 'child_folder')
os.makedirs(folder_path, exist_ok=True)
4. 递归创建目录并设置不同权限
若需为每个创建的目录设定不同的权限,可采取分步骤的方式逐一进行设置。这样能够确保每个目录根据其具体需求获得恰当的安全配置。
import os
parent_folder = 'parent_folder'
child_folder = os.path.join(parent_folder, 'child_folder')
os.makedirs(parent_folder, mode=0o755, exist_ok=True)
os.makedirs(child_folder, mode=0o700, exist_ok=True)
5. 创建临时目录
使用 tempfile 模块可以创建临时目录,适用于需要临时存储文件的场景。
import tempfile
with tempfile.TemporaryDirectory() as temp_dir:
print(f'临时目录路径:{temp_dir}')
# 在这里进行操作
# 离开 `with` 块后,临时目录将被自动删除。
五、常见问题解答
1. os.makedirs() 与 os.mkdir() 的区别
os.mkdir():只能创建单级目录,如果其父目录不存在,则会引发异常。os.makedirs():可以递归创建多级目录,父目录不存在也不会出错。
2. 如何处理权限不足的问题
当您没有足够的权限在指定位置创建目录时,系统会抛出 PermissionError 异常。为了解决这一问题,您可以采取以下措施:
- 验证当前用户账户是否拥有在目标路径创建文件夹的权限。
- 调整程序的执行权限,或选择一个当前用户有足够权限的其他目录来执行创建操作。
3. 在多线程或多进程环境下的注意事项
同时多个线程或进程创建同一目录可能会导致竞态条件。使用 exist_ok=True 可以减少异常的发生。
六、实战练习
练习 1:创建一个多级目录,并在其中创建一个文件
import os
# 定义目录和文件路径:
folder_path = os.path.join('data', 'images', '2023')
file_path = os.path.join(folder_path, 'picture.jpg')
# 创建多级目录:
os.makedirs(folder_path, exist_ok=True)
# 创建一个空文件:
with open(file_path, 'w') as f:
f.write('这是一个示例文件')
练习 2:安全地创建目录,避免异常中断程序
import os
def safe_mkdir(path):
try:
os.makedirs(path, exist_ok=True)
print(f'成功创建目录:{path}')
except Exception as e:
print(f'创建目录失败:{e}')
safe_mkdir('logs/2023/11')
七、总结
os.makedirs()方法是创建多级目录的强大工具。- 使用
exist_ok=True参数,可以防止因目录已存在而引发的异常。 - 结合
os.path模块,可以编写出更加健壮且跨平台的代码。 - 处理潜在的异常情况,能够提升程序的稳定性。
希望通过以上详尽的解释和示例,您能深入理解并熟练运用 os.makedirs() 方法!
📚️ 相关链接:
更多推荐
所有评论(0)