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?
4 Answers
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 POSIXmkdir -p
command), but only if the last path component is not an existing non-directory file.

- 338,267
- 99
- 616
- 750
-
2with `exist_ok` set to `true`, does mkdir just overwrite the dir and make it again? Or does it skip (re)making the dir since it already exists? – Prithvi Boinpally Apr 04 '23 at 19:59
-
3@PrithviBoinpally the latter—calling `mypath.mkdir(exist_ok=True)` will not raise an error, and will leave the existing directory associated with `mypath` intact. – glarue Apr 06 '23 at 17:55
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)

- 241
- 2
- 7
-
-
4
-
4For the copy cats here `pathlib.Path(path).parent.mkdir(parents=True, exist_ok=True)` – botenvouwer May 16 '22 at 08:28
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")

- 1,096
- 15
- 19
Universal function to create dirs/files that do not exist
def check_and_create_path(self, path: Path):
path_way = path.parent if path.is_file() else path
path_way.mkdir(parents=True, exist_ok=True)
if not path.exists():
path.touch()

- 21
- 7