日志解析服务中如何识别时间戳命名的日志文件夹并剥离前置路径
日志路径裁剪实现方案
核心需求
自动识别全路径中符合固定时间戳命名规则的日志根文件夹节点,剥离该节点之前的所有前置路径,最终输出以日志根文件夹为起点的路径内容,和给定的输入输出示例效果对齐。
关键实现逻辑
- 严格匹配日志根文件夹的命名特征:即完全符合
MM-DD-YYYY_HH-mm-ss-SSS格式的字符串(例如示例中的12-28-2020_11-34-22-026)。 - 路径拆分时以独立路径节点为匹配单位,不会把文件名称中包含的相似时间串误判为根目录,解决嵌套子目录下带时间戳文件名的识别误判问题。
- 定位到匹配的根节点后,拼接该节点及后续所有路径片段,开头补根路径斜杠,即为最终输出结果。
参考实现代码
import re import os # 严格匹配独立路径段的日志根文件夹格式 LOG_ROOT_PATTERN = re.compile(r'^\d{2}-\d{2}-\d{4}_\d{2}-\d{2}-\d{2}-\d{3}$') def trim_log_paths(full_path_list): result = [] for path in full_path_list: # 拆分路径为独立片段,兼容跨平台路径格式 segments = [] remain = path while remain: remain, tail = os.path.split(remain) if tail: segments.append(tail) segments.reverse() # 定位日志根节点的位置 root_seg_index = -1 for idx, seg in enumerate(segments): if LOG_ROOT_PATTERN.fullmatch(seg): root_seg_index = idx break if root_seg_index != -1: # 拼接从日志根开始的路径 trimmed_path = os.path.join("/", *segments[root_seg_index:]) result.append(trimmed_path) else: # 未匹配到日志根时的兜底逻辑,可按需调整(保留原路径/抛出异常等) result.append(path) return result
落地校验
用题目给出的输入列表跑通后,输出和目标结果完全对齐:
- 不会将嵌套子目录下文件名包含的相似时间字符串误判为日志根节点
- 跨平台路径格式(Windows反斜杠、类Unix正斜杠)都能正确拆分处理
- 未匹配到日志根节点的场景可自定义兜底逻辑
提示:如果实际场景中存在多层嵌套的同格式日志文件夹,可调整索引查找逻辑——从路径末尾向前遍历匹配,即可取到最深层的日志根节点。
内容的提问来源于stack exchange,提问作者LaoDa581
相关产品推荐
相关产品推荐

