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

如何使用glob.iglob仅获取包含.log文件的文件夹名称?

问题:提取包含.log文件的相对文件夹路径

我用以下代码递归查找所有后缀为.log的文件:

glob.iglob(f"{ROOT}/**/*.log", recursive = True)

但这个代码返回的是带完整路径的迭代器,我只想要相对于ROOT的文件夹名称,而不是文件的完整路径。

我的目录结构如下:

<ROOT>/
├── a/
│   ├── a.log
├── b/
│   └── b.log
├── c/
│   ├── c.log
│   └── cd/
│      └── cd.log

期望得到的结果是:

['a', 'b', 'c', 'c/cd']

请问该怎么实现?


解决方案

可以结合os.path模块处理路径,再通过集合去重,最终得到目标结果。示例代码如下:

import glob
import os

ROOT = "/your/actual/root/path"
unique_folders = set()

# 遍历所有.log文件的完整路径
for full_file_path in glob.iglob(f"{ROOT}/**/*.log", recursive=True):
    # 提取文件所在的文件夹完整路径
    folder_full_path = os.path.dirname(full_file_path)
    # 转换为相对于ROOT的相对路径
    relative_folder = os.path.relpath(folder_full_path, ROOT)
    # 加入集合自动去重
    unique_folders.add(relative_folder)

# 转换为排序后的列表(保持目录结构顺序)
result = sorted(unique_folders)
print(result)

关键步骤说明:

  • os.path.dirname(full_file_path):从文件的完整路径中剥离出所在文件夹的路径
  • os.path.relpath(...):将绝对文件夹路径转换为相对于ROOT的相对路径,自动处理层级关系
  • 使用set存储路径:避免同一文件夹下有多个.log文件时重复添加
  • sorted():让最终列表按目录结构排序,和你期望的输出格式一致

运行这段代码后,就能得到你需要的['a', 'b', 'c', 'c/cd']结果。


内容的提问来源于stack exchange,提问作者Tony Montana

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.09 16:47:42