8. 如何创建一个不存在的目录

题目

如何用最优雅的方式检查一个目录是否存在,如果不存在的话就创建它? 链接

回答一

尝试用os.path.exists,并且用os.makedirs来创建目录:

import os
if not os.path.exists(directory):
    os.makedirs(directory)

实际上这里有一个race condition - 如果目录在os.path.existsos.makedirs之间被创建了,那么os.makedirs将会失败并产生OSError这个错误。然而不幸的是,如果仅仅catch住这个OSSError然后继续的话并不是十分安全的,因为这样会忽略掉其他的一些错误原因,比如因为没有权限或者磁盘已满。

有一个方法是catch住这个error并且检查他的errorcode(see Is there a cross-platform way of getting information from Python’s OSError):

import os, errno

try:
    os.makedirs(directory)
except OSError as e:
    if e.errno != errno.EEXIST:
        raise

当然你还可以第二次检查os.path.exists,但是如果有人在第一次检查之后创建目录,然后在第二次检查之前又把目录删了,那我们仍然是被耍了。

综上,应该依据具体的情况来决定采用哪种实现方式。

geekcircle            updated 2018-06-01 23:57:00

results matching ""

    No results matching ""