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

Python如何筛选后缀数字最大的目标目录并获取其下日志路径

Python指定目录筛选实现方案

核心逻辑

  • 提取日志目录的上一级目录后缀数字作为排序依据
  • 无数字后缀的目录优先级默认最低
  • 最终取数字最大的目录对应的日志路径

代码实现(静态列表处理)

如果已经提前拿到待筛选的目录列表,可直接使用以下代码:

import re

# 待筛选的目录列表示例
dir_list = [
    "a/b/c/d.1/log/",
    "a/b/c/d/logs/",
    "a/b/c/d.3/logs/",
    "a/b/c/d.2/logs/"
]

def extract_suffix_score(dir_path):
    # 拆分路径,取log目录的上一级目录名
    upper_dir = dir_path.strip("/").split("/")[-2]
    # 匹配末尾的数字后缀
    num_match = re.search(r"\.(\d+)$", upper_dir)
    # 无数字后缀返回0,优先级最低
    return int(num_match.group(1)) if num_match else 0

# 按后缀数字取最大值对应的目录
target_log_dir = max(dir_list, key=extract_suffix_score)
print(target_log_dir) # 输出结果:a/b/c/d.3/logs/

代码实现(动态扫描目录)

如果需要从指定父目录自动扫描所有符合要求的日志目录,可使用扩展版本:

import os
import re

def get_max_suffix_log_dir(parent_dir: str):
    log_candidates = []
    # 遍历父目录下的所有子目录
    for entry in os.scandir(parent_dir):
        if not entry.is_dir():
            continue
        # 兼容log和logs两种日志目录命名
        for log_dir_name in ("log", "logs"):
            full_log_path = os.path.join(entry.path, log_dir_name)
            if os.path.isdir(full_log_path):
                # 统一路径末尾的分隔符格式
                log_candidates.append(full_log_path.rstrip(os.sep) + os.sep)
    if not log_candidates:
        return None
    # 计算后缀得分取最大值
    def get_score(dir_path):
        upper_dir = os.path.basename(os.path.dirname(dir_path.rstrip(os.sep)))
        num_match = re.search(r"\.(\d+)$", upper_dir)
        return int(num_match.group(1)) if num_match else 0
    return max(log_candidates, key=get_score)

# 调用示例,传入日志的上级父目录路径
print(get_max_suffix_log_dir("a/b/c/"))

注意事项

  • 正则规则仅匹配目录名末尾的.数字格式,不会被目录名中间的数字干扰
  • 自动适配不同操作系统的路径分隔符
  • 可根据实际需求修改log、logs的匹配规则,适配其他日志目录命名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.25 03:54:07