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

如何用Python筛选符合指定条件的目录并提取父目录名?

解决目录筛选与父目录提取问题

嘿,我来帮你搞定这两个目录筛选需求,以及你当前遇到的父目录提取问题!

一、先解决你当前的问题:提取目标父目录名

你已经用glob定位到了conditionfile的路径,接下来只需要借助Python的路径处理工具,就能轻松提取出上层的folder1这类目录名。这里有两种常用方法:

方法1:使用传统的os模块

import glob
import os

# 你已经拿到的文件路径列表
file_paths = glob.glob('./*/conditionfolder/conditionfile')
target_dirs = []

for path in file_paths:
    # 第一步:拿到conditionfolder的路径(去掉文件名)
    condition_folder_path = os.path.dirname(path)
    # 第二步:拿到conditionfolder的父目录,再提取目录名
    parent_dir_name = os.path.basename(os.path.dirname(condition_folder_path))
    target_dirs.append(parent_dir_name)

print(target_dirs)  # 输出: ['folder1']

方法2:使用更现代的pathlib(推荐)

Python 3.4+引入的pathlib让路径操作更直观,一行列表推导就能搞定:

import glob
from pathlib import Path

file_paths = glob.glob('./*/conditionfolder/conditionfile')
# .parent 往上走一级,两次.parent就到了目标目录,再取.name
target_dirs = [Path(path).parent.parent.name for path in file_paths]

print(target_dirs)  # 输出: ['folder1']

二、实现两个完整的筛选逻辑

1. 筛选包含conditionfolder子目录的目录(得到folder1、folder2)

我们可以先定位所有conditionfolder的路径,再提取它们的父目录名,用集合去重(避免重复路径影响结果):

import glob
from pathlib import Path

# 找到所有conditionfolder的路径
condition_folder_paths = glob.glob('./*/conditionfolder')
# 提取父目录名,用set去重后转成列表
target_dirs = list({Path(folder).parent.name for folder in condition_folder_paths})

print(target_dirs)  # 输出: ['folder1', 'folder2']

2. 筛选包含conditionfolder且其下有conditionfile的目录(得到folder1)

这就是你最初的需求,结合上面的父目录提取方法,直接用第一部分的代码就能得到结果。


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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.09 10:42:53