Python pathlib 如果目录不存在则创建目录

202

如果我想指定一个路径来保存文件,并在该路径中创建不存在的目录,是否可以使用一行代码使用pathlib库实现?

4个回答

349

是的,那就是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命令的行为相同),但仅当最后一个路径组件不是现有的非目录文件时。


3
如果将 exist_ok 设置为 true,那么 mkdir 命令会覆盖已有的目录并重新创建吗?还是会跳过(重新)创建目录,因为它已经存在了? - Prithvi Boinpally
3
调用mypath.mkdir(exist_ok=True)不会引发错误,并将保留与mypath相关联的现有目录。 - glarue

17

补充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)

不错!这是最整洁的例子,而且运行良好。 - Gatis Seja
4
甚至可以更短的写法:Path(filepath).parent。 - julie
5
对于那些模仿者,这里有一个代码片段:pathlib.Path(path).parent.mkdir(parents=True, exist_ok=True) - botenvouwer

13

这提供了额外的控制,以防路径已经存在:

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

创建不存在的目录/文件的通用函数

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()

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接