Python自定义模式匹配:提取日志中主题的入站字节数
Python日志提取特定入站字节值的高效实现
对于这类固定格式的日志提取需求,正则表达式+逐行读取是最简便高效的方案,无需关注时间戳等前缀内容,直接匹配关键字段即可。
核心实现代码
仅提取value值
import re # 定义匹配规则:忽略前缀,精准匹配目标字段格式 pattern = re.compile(r'type=GAUGE, name=Topic\.[^\.]+\.TotalIncomingBytes\.Count, value=(\d+)') # 逐行读取日志(大文件友好,避免内存占用过高) with open('your_log_path.log', 'r', encoding='utf-8') as log_file: for line in log_file: match_result = pattern.search(line) if match_result: # 提取捕获的value数字 incoming_bytes = match_result.group(1) print(incoming_bytes) # 可根据需求将结果存入列表、数据库或其他存储
同时提取主题名和value值
如果需要关联主题名与对应字节数,只需调整正则规则捕获主题字段:
import re pattern = re.compile(r'type=GAUGE, name=Topic\.([^\.]+)\.TotalIncomingBytes\.Count, value=(\d+)') with open('your_log_path.log', 'r', encoding='utf-8') as log_file: for line in log_file: match_result = pattern.search(line) if match_result: topic_name = match_result.group(1) incoming_bytes = match_result.group(2) print(f"主题 {topic_name} 总入站字节数:{incoming_bytes}")
方案说明
- 高效性:逐行读取模式适配超大日志文件,不会一次性加载整个文件到内存;正则表达式是Python原生高效文本匹配工具,该规则简洁无冗余,匹配速度快。
- 匹配准确性:
Topic\.[^\.]+\.精准匹配Topic.后任意不含点的主题名(兼容myTopic1/myTopic2等格式)(\d+)捕获value后的纯数字内容,避免无关字符干扰
- 兼容性:如果日志行存在字段间空格数量不固定的情况,可在正则中加入
\s*适配,例如:type=GAUGE,\s*name=Topic\.[^\.]+\.TotalIncomingBytes\.Count,\s*value=(\d+)
内容的提问来源于stack exchange,提问作者CS1999
相关产品推荐
相关产品推荐

