mkdir -p functionality in Python [duplicate] mkdir -p functionality in Python [duplicate] python python

mkdir -p functionality in Python [duplicate]


For Python ≥ 3.5, use pathlib.Path.mkdir:

import pathlibpathlib.Path("/tmp/path/to/desired/directory").mkdir(parents=True, exist_ok=True)

The exist_ok parameter was added in Python 3.5.


For Python ≥ 3.2, os.makedirs has an optional third argument exist_ok that, when True, enables the mkdir -p functionality—unless mode is provided and the existing directory has different permissions than the intended ones; in that case, OSError is raised as previously:

import osos.makedirs("/tmp/path/to/desired/directory", exist_ok=True)

For even older versions of Python, you can use os.makedirs and ignore the error:

import errno    import osdef mkdir_p(path):    try:        os.makedirs(path)    except OSError as exc:  # Python ≥ 2.5        if exc.errno == errno.EEXIST and os.path.isdir(path):            pass        # possibly handle other errno cases here, otherwise finally:        else:            raise


In Python >=3.2, that's

os.makedirs(path, exist_ok=True)

In earlier versions, use @tzot's answer.


This is easier than trapping the exception:

import osif not os.path.exists(...):    os.makedirs(...)

Disclaimer This approach requires two system calls which is more susceptible to race conditions under certain environments/conditions. If you're writing something more sophisticated than a simple throwaway script running in a controlled environment, you're better off going with the accepted answer that requires only one system call.

UPDATE 2012-07-27

I'm tempted to delete this answer, but I think there's value in the comment thread below. As such, I'm converting it to a wiki.


matomo