Python实现日志无时间戳行合并到上一行的代码Bug排查求助
代码Bug分析及修复方案
你的代码存在4个核心问题:
- 中间拼接变量
result_intermediate_line从未被更新,每次处理行后都没有存储当前拼接结果,拼接逻辑完全失效 - 遇到新的带时间戳的行时,仅返回了上一条拼接结果,没有将当前新的时间戳行赋值给中间变量,后续拼接没有基准行
- 仅在遇到新时间戳时才返回上一条结果,日志文件最后一条完整日志没有触发返回的条件,会丢失;同时多行拼接时没有加空格分隔,会出现字符粘连的问题
- 函数参数
full_file未被使用,函数内部硬编码读取全局变量input_file,参数传递失效
修正后的可直接运行代码如下:
import re input_file = "mwe.log" def read_logfile(full_file, start): result_intermediate_line = '' with open(full_file, 'r') as fin: for _raw_line in fin: log_line = _raw_line.rstrip() # 可选:跳过空行 if not log_line: continue if start.match(log_line): # 遇到新的时间戳行,先返回上一条拼接完成的行 if result_intermediate_line: yield result_intermediate_line # 将当前时间戳行设为新的待拼接基准行 result_intermediate_line = log_line else: # 非时间戳行拼接到当前基准行末尾,加空格分隔 result_intermediate_line += ' ' + log_line # 循环结束后返回最后一条拼接完成的行 if result_intermediate_line: yield result_intermediate_line if __name__ == "__main__": number_line = re.compile(r'^\d+\:\d+\:\d+\.\d+\s+') for line in read_logfile(input_file, number_line): print(line)
内容的提问来源于stack exchange,提问作者Peter Ebelsberger
相关产品推荐
相关产品推荐

