如何使用pathlib删除整个目录树?

4

我有一个项目正在使用pathlib,我想做相当于shutil.rmtree的操作。

我考虑使用以下方式实现:

def pathlib_rmtree(folder):
    if folder.exists():
        for file in folder.glob('**/*'):
            if file.is_dir():
                file.rmdir()
            else:
                file.unlink()
        folder.rmdir()

但我不确定 folder.glob('**/*') 是否有保证按顺序返回所有子文件夹为空后再调用 rmdir

所以问题有两个:

  1. 是否有更好的方法使用 pathlib 递归删除目录?
  2. glob 是否保证其结果的顺序,这样所有文件都在它们所属的子文件夹之前返回?
1个回答

11

实际上,这可以使用 iterdir 而不是 glob 来完成:

def rmtree(root):

    for p in root.iterdir():
        if p.is_dir():
            rmtree(p)
        else:
            p.unlink()

    root.rmdir()

1
一个小的补充是添加一个 if root.exists() 检查。 - rgacote

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