优雅地创建路径中的所有目录
这里有四个路径:
p1=r'\foo\bar\foobar.txt'
p2=r'\foo\bar\foo\foo\foobar.txt'
p3=r'\foo\bar\foo\foo2\foobar.txt'
p4=r'\foo2\bar\foo\foo\foobar.txt'
这些目录在硬盘上可能存在,也可能不存在。有没有什么优雅的方法可以创建每个路径中的目录呢?
我在想用 os.path.split()
在一个循环里来处理,然后用 os.path.exists
来检查目录是否存在,但我不知道有没有更好的方法。
3 个回答
1
在POSIX系统中,有一种简单的方法来构建路径。假设你的路径是这样的:dirPath = '../foo/bar'
,其中foo
和bar
这两个文件夹都不存在:
path = ''
for d in dirPath.split('/'):
# handle instances of // in string
if not d: continue
path += d + '/'
if not os.path.isdir(path):
os.mkdir(path)
58
在Python 3.6及以上版本,你可以这样做:
import pathlib
path = pathlib.Path(p4)
path.parent.mkdir(parents=True, exist_ok=True)
97
你需要的是os.makedirs()
,这个函数正好能满足你的需求。
文档中提到:
这是一个递归创建目录的函数。它和mkdir()类似,但会创建所有需要的中间目录,以便包含最终的目录。如果最终的目录已经存在或者无法创建,就会抛出一个错误。
默认情况下,如果最终的目录已经存在,它会失败;所以在调用os.makedirs()
之前,你最好先检查一下这个目录是否存在,或者可以使用os.makedirs(..., exist_ok=True)
来忽略这个存在性检查。