一文理解 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
,则不会抛出异常。注意:
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
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()
方法!
📚️ 相关链接:
Python 官方文档 – os.makedirs(name, mode=0o777, exist_ok=False)
Python3 os.makedirs() 和 os.mkdir() 用法
作者:幸运 lucky