如果我想指定一个路径来保存文件,并在该路径中创建不存在的目录,是否可以使用一行代码使用pathlib库实现?
是的,那就是Path.mkdir
:
pathlib.Path('/tmp/sub1/sub2').mkdir(parents=True, exist_ok=True)
从文档中:
如果parents为True,则会按需创建此路径的任何缺失父项;它们将使用默认权限创建,而不考虑mode(模仿POSIX
mkdir -p
命令)。如果parents为false(默认值),则缺少的父项将触发
FileNotFoundError
。如果exist_ok为false(默认值),则如果目标目录已存在,则会引发
FileExistsError
异常。如果exist_ok为true,则会忽略
FileExistsError
异常(与POSIX的mkdir -p
命令的行为相同),但仅当最后一个路径组件不是现有的非目录文件时。
补充Wim的答复。如果您的路径末尾是一个您不想作为目录创建的文件。
例如。 '/existing_dir/not_existing_dir/another_dir/a_file'
那么您可以使用PurePath.parents。但好处在于,由于Paths继承了Pure Paths的属性,所以您可以简单地执行
filepath = '/existing_dir/not_existing_dir/another_dir/a_file'
pathlib.Path(filepath).parents[0].mkdir(parents=True, exist_ok=True)
pathlib.Path(path).parent.mkdir(parents=True, exist_ok=True)
。 - botenvouwer这提供了额外的控制,以防路径已经存在:
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")
创建不存在的目录/文件的通用函数
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()
exist_ok
设置为true
,那么 mkdir 命令会覆盖已有的目录并重新创建吗?还是会跳过(重新)创建目录,因为它已经存在了? - Prithvi Boinpallymypath.mkdir(exist_ok=True)
不会引发错误,并将保留与mypath
相关联的现有目录。 - glarue