如何用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
相关产品推荐
相关产品推荐

