Python安全创建目录的方法
在介绍Python安全创建目录之前,先举一个不安全创建目录的方式:
if not os.path.exists(directory):
os.makedirs(directory)
在例子里,先判断目录是否存在,然后创建目录。这种方式是不安全的,它会导致竞争条件。在os.path.exists()和os.makedirs()之间的时间可能会出现目录被创建。不推荐使用这种方式。
Python 3.5+:
在python 3.5+可以使用pathlib的mkdir:
import pathlib
pathlib.Path('/my/directory').mkdir(parents=True, exist_ok=True)
pathlib的mkdir接收两个参数:
- parents:如果父目录不存在,是否创建父目录。
- exist_ok:只有在目录不存在时创建目录,目录已存在时不会抛出异常。
Python 3.2+:
使用pathlib2
python3.2+是和Python3.5+用法一样,但是需要导入的是pathlib2,而不是pathlib。
使用os
import os
os.makedirs(path, exist_ok=True)
Python 2.7+:
使用pathlib2
使用方法和Python3.2一样,导入的是pathlib2.
使用os
为了避免出现竞争条件,使用os需要使用try语句。
import os
try:
os.makedirs(path)
except OSError:
if not os.path.isdir(path):
raise