Python pathlib make directories if they don’t exist

PythonPathlib

Python Problem Overview


If I wanted to specify a path to save files to and make directories that don’t exist in that path, is it possible to do this using the pathlib library in one line of code?

Python Solutions


Solution 1 - Python

Yes, that is Path.mkdir:

pathlib.Path('/tmp/sub1/sub2').mkdir(parents=True, exist_ok=True)

From the docs: > If parents is true, any missing parents of this path are created as > needed; they are created with the default permissions without taking > mode into account (mimicking the POSIX mkdir -p command). > > If parents is false (the default), a missing parent raises > FileNotFoundError. > > If exist_ok is false (the default), FileExistsError is raised if the > target directory already exists. > > If exist_ok is true, FileExistsError exceptions will be ignored (same > behavior as the POSIX mkdir -p command), but only if the last path > component is not an existing non-directory file.

Solution 2 - Python

This gives additional control for the case that the path is already there:

path = Path.cwd() / 'new' / 'hi' / 'there'
try:
    path.mkdir(parents=True, exist_ok=False)
except FileExistsError:
    print("Folder is already there")
else:
    print("Folder was created")

Solution 3 - Python

Adding to Wim's answer. If your path has a file on the end that you do not want made as a directory.

ie. '/existing_dir/not_existing_dir/another_dir/a_file'

Then you use PurePath.parents. But the nice thing is that because Paths inherit the attributes of Pure Paths, then you can simply do

filepath = '/existing_dir/not_existing_dir/another_dir/a_file'
pathlib.Path(filepath).parents[0].mkdir(parents=True, exist_ok=True)

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
QuestionJasonca1View Question on Stackoverflow
Solution 1 - PythonwimView Answer on Stackoverflow
Solution 2 - PythonKolibrilView Answer on Stackoverflow
Solution 3 - PythonImmotView Answer on Stackoverflow