Python 使用文件输出自动创建目录

Python 使用文件输出自动创建目录,python,file-io,Python,File Io,可能重复: 假设我要创建一个文件: filename = "/foo/bar/baz.txt" with open(filename, "w") as f: f.write("FOOBAR") 这会产生一个IOError,因为/foo/bar不存在 自动生成这些目录的最具python风格的方法是什么?我是否有必要在每一个(即,/foo,then/foo/bar)上显式调用os.path.exists和os.mkdir 该函数执行此操作。请尝试以下操作: 导入操作系统 输入错误号 f

可能重复:

假设我要创建一个文件:

filename = "/foo/bar/baz.txt"

with open(filename, "w") as f:
    f.write("FOOBAR")
这会产生一个
IOError
,因为
/foo/bar
不存在

自动生成这些目录的最具python风格的方法是什么?我是否有必要在每一个(即,/foo,then/foo/bar)上显式调用
os.path.exists
os.mkdir

该函数执行此操作。请尝试以下操作:

导入操作系统
输入错误号
filename=“/foo/bar/baz.txt”
如果不存在os.path.exists(os.path.dirname(文件名)):
尝试:
os.makedirs(os.path.dirname(文件名))
除OSError作为exc外:#防止竞争状况
如果exc.errno!=errno.EEXIST:
提升
打开(文件名为“w”)作为f:
f、 写(“FOOBAR”)
添加
try except
块的原因是处理在
os.path.exists
os.makedirs
调用之间创建目录的情况,以便保护我们免受竞争条件的影响


在Python 3.2+中,有一种方法可以避免上述竞争条件:

导入操作系统
filename=“/foo/bar/baz.txt”
os.makedirs(os.path.dirname(文件名),exist\u ok=True)
打开(文件名为“w”)作为f:
f、 写(“FOOBAR”)

只需浏览一下
os.mkdir
并阅读关于另一个函数的文档:)这里有一个稍微不同的方法:想法?如果不是os.path.exists,则需要初始
,因为
os.makedirs
使用了?很好。但是请注意,您可能需要检查文件名是否包含路径,或者尝试创建一个空名称的路径(例如从
baz.txt
)将出现错误
FileNotFoundError:[Errno 2]没有这样的文件或目录:“”
。显然,只有在写入当前工作目录时才会发生这种情况。PermissionError:[Errno 13]权限被拒绝:'/foo'