如何用Python递归查找并删除空目录或仅含空目录的文件夹
递归删除嵌套空文件夹的Python实现
原代码问题分析
你原来的代码是从上到下正序遍历目录,遍历到上层文件夹Y、Z的时候,内层的X还没被删除,此时Y、Z还存在子文件,不会被判定为空。等X被删除后Y、Z已经变成空文件夹,但已经过了遍历节点,所以不会被处理。
实现思路
采用从最内层子目录到外层目录的倒序遍历逻辑:
- 先处理最深层的文件夹,删除空的内层文件夹
- 再逐层向上判断上层文件夹是否在子文件被删除后变为空,满足条件就删除
完全匹配你的三个删除规则:
- 优先删除最内层的空文件夹X
- X删除后Y变为空,轮到处理Y时直接删除
- Y删除后Z变为空,处理Z时直接删除
完整代码
from pathlib import Path import logging # 配置日志(适配你原代码中的logger使用习惯) logging.basicConfig(level=logging.INFO) logger = logging.getLogger(__name__) def remove_nested_empty_dirs(root_folder: str, keep_root: bool = True): root = Path(root_folder) # 按路径深度从大到小排序,保证先处理最内层目录 all_paths = sorted(root.rglob("*"), key=lambda p: len(p.parts), reverse=True) for path in all_paths: if not path.is_dir(): continue # 判断当前文件夹是否为空 if len(list(path.iterdir())) == 0: # 可选:保留指定的根目录,即使为空也不删除 if keep_root and path == root: continue logger.info(f"remove {path}") path.rmdir() if __name__ == "__main__": # 替换为你要处理的目录路径 target_folder = "/home/abc" remove_nested_empty_dirs(target_folder)
补充说明
如果不需要保留根目录,调用函数时传入keep_root=False即可,根目录为空时也会被删除。
内容的提问来源于stack exchange,提问作者abisko
相关产品推荐
相关产品推荐

