使用文件输出自动创build目录

可能重复:
Python中的mkdir -pfunction

假设我想创build一个文件:

filename = "/foo/bar/baz.txt" with open(filename, "w") as f: f.write("FOOBAR") 

这会产生IOError ,因为/foo/bar不存在。

什么是自动生成这些目录最pythonic的方式? 是否有必要显式调用os.path.existsos.mkdir在每一个(即,/富,然后/富/酒吧)?

os.makedirs函数执行此操作。 尝试以下操作:

 import os import errno filename = "/foo/bar/baz.txt" if not os.path.exists(os.path.dirname(filename)): try: os.makedirs(os.path.dirname(filename)) except OSError as exc: # Guard against race condition if exc.errno != errno.EEXIST: raise with open(filename, "w") as f: f.write("FOOBAR") 

添加try-except块的原因是为了处理在os.path.existsos.makedirs调用之间创build目录的情况,以便保护我们免受竞争条件的影响。


在Python 3.2+中,有一个更好的方法可以避免上面的竞争条件:

 filename = "/foo/bar/baz.txt"¨ os.makedirs(os.path.dirname(filename), exist_ok=True) with open(filename, "w") as f: f.write("FOOBAR")