You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Python递归查找并删除空目录或仅含空目录的文件夹

递归删除嵌套空文件夹的Python实现

原代码问题分析

你原来的代码是从上到下正序遍历目录,遍历到上层文件夹Y、Z的时候,内层的X还没被删除,此时Y、Z还存在子文件,不会被判定为空。等X被删除后Y、Z已经变成空文件夹,但已经过了遍历节点,所以不会被处理。

实现思路

采用从最内层子目录到外层目录的倒序遍历逻辑:

  • 先处理最深层的文件夹,删除空的内层文件夹
  • 再逐层向上判断上层文件夹是否在子文件被删除后变为空,满足条件就删除
    完全匹配你的三个删除规则:
  1. 优先删除最内层的空文件夹X
  2. X删除后Y变为空,轮到处理Y时直接删除
  3. 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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.06 23:39:02