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

