Jas*_*ca1 18 python directory pathlib
有没有办法删除PathLib模块中的目录及其内容?使用path.unlink()它只删除文件,path.rmdir()目录必须为空.在一个函数调用中没有办法吗?
abc*_*ccd 35
正如您所知,Path删除文件/目录的唯一两种方法是.unlink(),.rmdir()并且两者都不能达到您想要的效果.
Pathlib是一个模块,它提供跨不同操作系统的面向对象的路径,它并不意味着有很多不同的方法.
该库的目的是提供一个简单的类层次结构来处理文件系统路径以及用户对它们执行的常见操作.
"不常见"的文件系统更改(例如递归删除目录)存储在不同的模块中.如果要以递归方式删除目录,则应使用该shutil模块.(它也适用于Path实例!)
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", ...]
Run Code Online (Sandbox Code Playgroud)
小智 22
这是一个纯 pathlib实现:
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()
Run Code Online (Sandbox Code Playgroud)
Ram*_*ami 10
否则,如果您只需要,您可以试试这个pathlib:
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)
Run Code Online (Sandbox Code Playgroud)
简单有效:
def rmtree(f: Path):
if f.is_file():
f.unlink()
else:
for child in f.iterdir():
rmtree(child)
f.rmdir()
Run Code Online (Sandbox Code Playgroud)
您可以使用 pathlib3x - 它提供了最新的向后移植(在撰写本答案时为 Python 3.10.a0)Python 3.6 或更高版本的 Python pathlib,以及一些附加功能,例如rmtree
>>> python -m pip install pathlib3x
>>> import pathlib3x as pathlib
>>> my_path = pathlib.Path('c:/tmp/some_directory')
>>> my_path.rmtree(ignore_errors=True)
Run Code Online (Sandbox Code Playgroud)
免责声明:我是 pathlib3x 库的作者。
def rm_rf(basedir):
if isinstance(basedir,str): basedir = pathlib.Path(basedir)
if not basedir.is_dir(): return
for p in reversed(list(basedir.rglob("*"))):
if p.is_file(): p.unlink()
elif p.is_dir(): p.rmdir()
basedir.rmdir()
Run Code Online (Sandbox Code Playgroud)