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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.01 11:48:04