【发布时间】:2018-05-01 02:52:32
【问题描述】:
如果我想指定一个路径来保存文件并创建该路径中不存在的目录,是否可以在一行代码中使用 pathlib 库来做到这一点?
【问题讨论】:
如果我想指定一个路径来保存文件并创建该路径中不存在的目录,是否可以在一行代码中使用 pathlib 库来做到这一点?
【问题讨论】:
是的,就是Path.mkdir:
pathlib.Path('/tmp/sub1/sub2').mkdir(parents=True, exist_ok=True)
来自the docs:
如果 parents 为真,则此路径的任何缺失父级都将创建为 需要;它们是使用默认权限创建的,而不采用 考虑到模式(模仿 POSIX
mkdir -p命令)。如果 parents 为 false(默认值),则缺少父级引发
FileNotFoundError.如果 exist_ok 为 false(默认值),则引发
FileExistsError目标目录已存在。如果 exist_ok 为真,
FileExistsError异常将被忽略(同 POSIXmkdir -p命令的行为),但前提是最后一个路径 组件不是现有的非目录文件。
【讨论】:
这为路径已经存在的情况提供了额外的控制:
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")
【讨论】:
添加到 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)
【讨论】: