Python pathlib make directories if they don’t exist
Question:
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?
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 POSIX mkdir -p
command), but only if the last path
component is not an existing non-directory file.
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")
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)
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()
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?
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 POSIXmkdir -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.
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")
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)
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()