PathLib 递归删除目录?
PathLib recursively remove directory?
有什么方法可以删除 PathLib 模块中的目录及其内容吗?使用 path.unlink()
它只删除一个文件,使用 path.rmdir()
目录必须是空的。有没有办法在一个函数调用中做到这一点?
如您所知,仅有的两个 Path
删除 files/directories 的方法是 .unlink()
和 .rmdir()
,两者都不是您想要的。
Pathlib 是一个模块,它提供跨不同 OS 的面向对象的路径,它并不意味着有很多不同的方法。
The aim of this library is to provide a simple hierarchy of classes to
handle filesystem paths and the common operations users do over them.
“不常见”的文件系统更改(例如递归删除目录)存储在不同的模块中。如果你想递归地删除一个目录,你应该使用 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", ...]
如果您不介意使用第三方库,请尝试 path。
它的API类似于pathlib.Path
, but provides some additional methods, including Path.rmtree()
递归删除一个目录树
否则,如果你只想要这个,你可以试试这个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)
这是一个纯路径库实现:
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()
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()
您可以使用 pathlib3x - 它提供了最新的向后移植(在撰写此答案的日期 Python 3.10.a0) Python pathlib 用于 Python 3.6 或更新版本,以及一些额外的功能,例如 rmtree
>>> python -m pip install pathlib3x
>>> import pathlib3x as pathlib
>>> my_path = pathlib.Path('c:/tmp/some_directory')
>>> my_path.rmtree(ignore_errors=True)
上找到它
免责声明:我是 pathlib3x 库的作者。
简单有效:
def rmtree(f: Path):
if f.is_file():
f.unlink()
else:
for child in f.iterdir():
rmtree(child)
f.rmdir()
有什么方法可以删除 PathLib 模块中的目录及其内容吗?使用 path.unlink()
它只删除一个文件,使用 path.rmdir()
目录必须是空的。有没有办法在一个函数调用中做到这一点?
如您所知,仅有的两个 Path
删除 files/directories 的方法是 .unlink()
和 .rmdir()
,两者都不是您想要的。
Pathlib 是一个模块,它提供跨不同 OS 的面向对象的路径,它并不意味着有很多不同的方法。
The aim of this library is to provide a simple hierarchy of classes to handle filesystem paths and the common operations users do over them.
“不常见”的文件系统更改(例如递归删除目录)存储在不同的模块中。如果你想递归地删除一个目录,你应该使用 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", ...]
如果您不介意使用第三方库,请尝试 path。
它的API类似于pathlib.Path
, but provides some additional methods, including Path.rmtree()
递归删除一个目录树
否则,如果你只想要这个,你可以试试这个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)
这是一个纯路径库实现:
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()
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()
您可以使用 pathlib3x - 它提供了最新的向后移植(在撰写此答案的日期 Python 3.10.a0) Python pathlib 用于 Python 3.6 或更新版本,以及一些额外的功能,例如 rmtree
>>> python -m pip install pathlib3x
>>> import pathlib3x as pathlib
>>> my_path = pathlib.Path('c:/tmp/some_directory')
>>> my_path.rmtree(ignore_errors=True)
上找到它
免责声明:我是 pathlib3x 库的作者。
简单有效:
def rmtree(f: Path):
if f.is_file():
f.unlink()
else:
for child in f.iterdir():
rmtree(child)
f.rmdir()