首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >PathLib递归删除目录?

PathLib递归删除目录?
EN

Stack Overflow用户
提问于 2018-05-05 07:29:39
回答 6查看 62.3K关注 0票数 122

有没有办法删除PathLib模块中的目录及其内容?对于path.unlink(),它只删除一个文件,对于path.rmdir(),目录必须是空的。没有办法在一个函数调用中完成它吗?

EN

回答 6

Stack Overflow用户

回答已采纳

发布于 2018-05-05 08:01:43

正如您已经知道的,删除文件/目录的唯一两个Path方法是.unlink().rmdir(),两者都不是您想要的。

Pathlib是一个提供跨不同操作系统的面向对象路径的模块,它不应该有很多不同的方法。

这个库的目的是提供一个简单的类层次结构来处理文件系统路径以及用户对它们所做的常见操作。

“不寻常”的文件系统更改,例如递归删除目录,存储在不同的模块中。如果要递归删除目录,则应使用shutil模块。(它也适用于Path实例!)

代码语言:javascript
复制
import shutil
import pathlib
import os  # for checking results

print(os.listdir())
# ["a_directory", "foo.py", ...]

path = pathlib.Path("a_directory")

shutil.rmtree(path)
print(os.listdir())
# ["foo.py", ...]
票数 148
EN

Stack Overflow用户

发布于 2019-10-01 11:25:27

下面是一个纯路径库实现:

代码语言:javascript
复制
from pathlib import Path


def rm_tree(pth):
    pth = Path(pth)
    for child in pth.glob('*'):
        if child.is_file():
            child.unlink()
        else:
            rm_tree(child)
    pth.rmdir()
票数 26
EN

Stack Overflow用户

发布于 2019-09-11 15:14:33

否则,如果您只想要pathlib,可以尝试此方法。

代码语言:javascript
复制
from pathlib import Path


def rm_tree(pth: Path):
    for child in pth.iterdir():
        if child.is_file():
            child.unlink()
        else:
            rm_tree(child)
    pth.rmdir()

rm_tree(your_path)
票数 14
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50186904

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档