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

Python遍历子目录文件:排除空目录与指定文件类型

问题整理

文件结构

└── artifacts
    ├── IMAGES
    │       ├── Lab1.1
    │       │   ├── test1.tar.gz
    │       │   ├── .
    │       │   ├── .
    │       │   ├── .
    │       │   └── test2.txt
    │       └── Lab1.2
    │           ├── test1_1.tar.gz
    │           ├── .
    │           ├── .
    │           └── test2_1.txt
    ├── INSTANCE
    │   ├── CONFIGURATION
    │   │   ├── CUSTOM1.json
    │   │   ├── CUSTOM2.json
    │   │   └── CUSTOM3.json

当前代码

def find_files_under_directory(self, directory_path):
    dir_path = os.path.dirname(os.path.realpath(__file__))
    int_path = os.path.join(dir_path, directory_path)
    data = pathlib.Path(int_path)
    data.rglob("*")
    return list(data.rglob("*"))

需求

  1. 排除返回列表中的空目录;
  2. 排除特定类型文件(例如.txt),同时保留列表原有顺序。

期望返回示例:

.../artifacts/IMAGES/Lab1.1/test1.tar.gz
.../artifacts/IMAGES/Lab1.2/test1_1.tar.gz
.../artifacts/INSTANCE/CONFIGURATION/CUSTOM1.json
.../artifacts/INSTANCE/CONFIGURATION/CUSTOM2.json
.../artifacts/INSTANCE/CONFIGURATION/CUSTOM3.json

修改后的代码
import os
from pathlib import Path

def find_files_under_directory(self, directory_path):
    dir_path = os.path.dirname(os.path.realpath(__file__))
    int_path = os.path.join(dir_path, directory_path)
    root_path = Path(int_path)
    filtered_results = []
    
    # 按原遍历顺序筛选
    for path in root_path.rglob("*"):
        # 跳过所有目录(包含空目录,满足需求1)
        if path.is_dir():
            continue
        # 排除指定后缀的文件(这里是.txt,满足需求2)
        if path.suffix.lower() == ".txt":
            continue
        filtered_results.append(path)
    
    return filtered_results

关键说明
  1. 目录过滤:代码直接跳过所有目录,既排除了空目录,也符合期望结果中只返回文件的要求。如果需要保留非空目录,可把目录判断逻辑改成这样:
    if path.is_dir():
        # 仅跳过空目录,非空目录加入结果
        if not any(path.iterdir()):
            continue
        filtered_results.append(path)
    
  2. 文件后缀过滤:用path.suffix.lower()统一转小写,避免因大小写差异(比如.TXT)漏过滤;
  3. 顺序保留:rglob()的遍历顺序是稳定的,按原顺序遍历筛选后,结果列表的顺序和原返回结果一致。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 15:02:15