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

如何用Python脚本将Vivado仿真日志转为指定格式JSON?

转换Vivado冒号分隔日志为指定JSON格式

我有一份Vivado模拟器生成的日志文件,希望将其转换为指定格式的JSON以用于可视化。此前查找的日志转JSON方案多针对CSV格式,而我的日志为冒号分隔。

日志示例行:

OVL_ERROR : ASSERT_NO_OVERFLOW : Counter did not reset after reaching Threshold : Test expression changed value from allowed maximum value max to a value in the range max+1 to min : severity 1 : time 430000 : counter_tb.no_overflow.ovl_error_t

期望转换后的JSON格式:

{
"Error":"OVL_ERROR",
"Assertion":"ASSERT_NO_OVERFLOW",
"Message":"Counter_did_not_reset_after_reaching_Threshold",
"Coverage":"Test expression changed value from allowed maximum value max to a value in the range max+1 to min",
"Severity":"1",
"Time":"430000"
}

Python实现代码

import json

def parse_vivado_log_line(line):
    # 按" : "分割行,同时去除每个字段的首尾空格,过滤空内容
    parts = [segment.strip() for segment in line.split(" : ") if segment.strip()]
    
    # 映射日志字段到目标JSON结构
    log_entry = {
        "Error": parts[0],
        "Assertion": parts[1],
        "Message": parts[2].replace(" ", "_"),
        "Coverage": parts[3],
        "Severity": parts[4].split()[1],
        "Time": parts[5].split()[1]
    }
    return log_entry

def convert_log_to_json(input_path, output_path):
    log_entries = []
    with open(input_path, 'r', encoding='utf-8') as log_file:
        for line_num, line in enumerate(log_file, 1):
            stripped_line = line.strip()
            if not stripped_line:
                continue
            try:
                entry = parse_vivado_log_line(stripped_line)
                log_entries.append(entry)
            except (IndexError, ValueError) as e:
                print(f"第{line_num}行格式异常,跳过: {stripped_line} | 错误信息: {str(e)}")
    
    # 写入格式化后的JSON文件
    with open(output_path, 'w', encoding='utf-8') as json_file:
        json.dump(log_entries, json_file, indent=4)

# 执行转换(替换为你的日志文件路径和输出路径)
if __name__ == "__main__":
    convert_log_to_json("vivado_sim.log", "visualization_data.json")

代码说明

  1. 字段分割:使用" : "作为分隔符,避免误分割日志内容中可能存在的冒号
  2. 字段映射:
    • 将Message字段的空格替换为下划线,匹配目标格式要求
    • 从severity X和time X格式的字段中提取数值部分
  3. 异常处理:捕获格式错误的行并打印提示,避免程序中断
  4. 编码兼容:指定utf-8编码处理日志文件,避免中文或特殊字符乱码

内容的提问来源于stack exchange,提问作者Sujan SM

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.13 03:35:18