PathLib模块能否递归删除目录?单次调用实现方法咨询
在PathLib中递归删除目录的方法
你说得没错,Python的pathlib模块本身确实没有提供单次调用就能递归删除非空目录及其全部内容的内置方法——Path.unlink()只能删除文件或符号链接,Path.rmdir()也只支持删除空目录,单独用这俩都搞不定带内容的目录。
不过有两种很实用的解决办法:
1. 配合shutil.rmtree()使用
虽然shutil不是pathlib的一部分,但它完全兼容Path对象,这是最简便的方案:
from pathlib import Path import shutil # 定义要删除的目录 target_dir = Path("./my_non_empty_directory") # 递归删除整个目录树 shutil.rmtree(target_dir)
shutil.rmtree()会自动处理目录下的所有文件、子目录,不管嵌套多深,一步到位完成删除。
2. 自己用PathLib实现递归删除逻辑
如果你不想依赖shutil,可以基于pathlib的方法写一个递归函数:
from pathlib import Path def recursive_remove(path: Path): # 先处理文件或符号链接 if path.is_file() or path.is_symlink(): path.unlink() # 处理目录:先递归删除所有子项,再删空目录 elif path.is_dir(): for item in path.iterdir(): recursive_remove(item) path.rmdir() # 使用示例 target_dir = Path("./my_non_empty_directory") recursive_remove(target_dir)
这个逻辑很直观:先遍历目录里的每一项,把文件/子目录都删干净,最后再删除已经空了的目标目录。
顺带提一句,官方没给内置递归删除方法,大概率是考虑到递归删除的风险性——误删重要目录的代价太高,所以把这个操作交给更专门的工具(比如shutil),或者让用户自己实现更可控的逻辑。
内容的提问来源于stack exchange,提问作者CaptainDriftwood




