开发者

Elegant way to make all dirs in a path

Here are four paths:

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'

The directories may or may not exist on a drive. What would be the most elegant开发者_如何学运维 way to create the directories in each path?

I was thinking about using os.path.split() in a loop, and checking for a dir with os.path.exists, but I don't know it there's a better approach.


You are looking for os.makedirs() which does exactly what you need.

The documentation states:

Recursive directory creation function. Like mkdir(), but makes all intermediate-level directories needed to contain the leaf directory. Raises an error exception if the leaf directory already exists or cannot be created.

Because it fails if the leaf directory already exists you'll want to test for existence before calling os.makedirs().


On Python 3.6+ you can do:

import pathlib

path = pathlib.Path(p4)
path.parent.mkdir(parents=True, exist_ok=True)


A simple way to build the paths in POSIX systems. Assume your path is something like: dirPath = '../foo/bar', where neither foo or bar exist:

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)
   
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜