Make directory path: Difference between revisions
Content added Content deleted
No edit summary |
No edit summary |
||
Line 8: | Line 8: | ||
=={header|Python}== |
=={{header|Python}}== |
||
<lang Python> |
|||
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 |
|||
⚫ | |||
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 <code>os.makedirs</code>, 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> |
<lang Python> |
||
def mkdirp(path): |
def mkdirp(path): |
||
os.makedirs(path, exist_ok=True) |
|||
⚫ | |||
</lang> |
</lang> |
Revision as of 04:41, 9 August 2014
Make directory path is a draft programming task. It is not yet considered ready to be promoted as a complete task, for reasons that should be found in its talk page.
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> 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>