使用文件输出自动创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.exists
和os.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.exists
和os.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")