优雅地创建路径中的所有目录

75 投票
3 回答
39979 浏览
提问于 2025-04-16 13:06

这里有四个路径:

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',其中foobar这两个文件夹都不存在:

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)来忽略这个存在性检查。

撰写回答