Elegant way to make all dirs in a path

PythonPath

Python Problem Overview


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.

Python Solutions


Solution 1 - Python

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().

Solution 2 - Python

On Python 3.6+ you can do:

import pathlib

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

Solution 3 - Python

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)
   

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
QuestionmarwView Question on Stackoverflow
Solution 1 - PythonDavid HeffernanView Answer on Stackoverflow
Solution 2 - PythonaxwellView Answer on Stackoverflow
Solution 3 - PythonRexBarkerView Answer on Stackoverflow