Make directory path: Difference between revisions
No edit summary |
No edit summary |
||
Line 10: | Line 10: | ||
=={{header|Python}}== |
=={{header|Python}}== |
||
<lang Python> |
<lang Python> |
||
from errno import EEXIST |
|||
from os import mkdir, curdir |
|||
from os.path import split, exists |
|||
def mkdirp(path, mode=0777): |
def mkdirp(path, mode=0777): |
||
head, tail = split(path) |
head, tail = split(path) |
Revision as of 04:41, 9 August 2014
Given a path to a directory (for example ./path/to/dir
) create the directory and any missing parents. If the directory already exists, return successfully.
This task is named after the posix mkdir -p
command, and several libraries which implement the same behavior.
Ideally implementations will work equally well cross-platform (on windows, linux, and OS X).
Python
<lang Python> from errno import EEXIST from os import mkdir, curdir from os.path import split, exists
def mkdirp(path, mode=0777):
head, tail = split(path) if not tail: head, tail = split(head) if head and tail and not exists(head): try: mkdirp(head, mode) except OSError as e: # be happy if someone already created the path if e.errno != EEXIST: raise if tail == curdir: # xxx/newdir/. exists if xxx/newdir exists return try: mkdir(path, mode) except OSError as e: # be happy if someone already created the path if e.errno != EEXIST: raise
</lang>
Above is a modified version of the standard library's os.makedirs
, for pedagogical purposes. In practice, you would be more likely to use the standard library call:
<lang Python> def mkdirp(path):
try: os.makedirs(path) except OSError as exc: # Python >2.5 if exc.errno == errno.EEXIST and os.path.isdir(path): pass else: raise
</lang>
In Python3 this becomes even simpler:
<lang Python> def mkdirp(path):
os.makedirs(path, exist_ok=True)
</lang>