使用 python 将 log.txt 文件转换为 JSON

问题描述 投票:0回答:1

我正在学习 Python,编程知识非常有限,作为一个学习项目,我有一个 .txt 系统日志,我正在尝试将其转换为 JSON。

我希望 python 程序解析 .txt 文件,使每个事件成为一个对象,并将该事件的条目拆分为键:值对。这样稍后我就可以查询并总结日志中的警报。最终我希望程序接受用户输入来查询 JSON(但那是另一天的事了)。

我当前的脚本看起来像这样

import re
import json
import os

def parse_log_file(input_file):
    events = []

    with open(input_file, 'r') as file:
        log_content = file.read()

    # extract individual events
    event_pattern = re.compile(r'Event \d+\s+(.*?)\s+(?=(?:Event \d+|$))', re.DOTALL)
    matches = event_pattern.findall(log_content)

    for match in matches:
        event_dict = {}
        lines = match.split('\n')

        for line in lines:
            if line.strip():
                key, value = map(str.strip, line.split(':', 1))
                event_dict[key] = value

        events.append(event_dict)

    # Write the JSON output with the same name as the input file
    output_file = os.path.splitext(input_file)[0] + ".json"
    with open(output_file, 'w') as json_file:
        json.dump(events, json_file, indent=4)

    print(f"JSON file saved as,{output_file}")
if __name__ == "__main__":
    input_file = "log.txt"
    parse_log_file(input_file)

所需输出:

活动1
{“日志名称”:“系统”,
“机器名称”:“笔记本电脑”,
“提供商名称”:“英特尔”,
“级别显示名称”:“信息”,
” 消息: :“检查剩余资源预算。模块 超出资源预算,无法分配FwCps,
状态 = 系统资源不足,无法完成 API.." },

活动 2 {
“日志名称”:“系统”,
“机器名称”:“笔记本电脑”
“ProviderName”:“Microsoft-Windows-Kernel-Power”
“级别显示名称”:“信息”
"Message" : "系统会话已从 186 转换为 188.原因InputPoUserPresent
引导 ID:67"
}

但是我的输出目前看起来像这样:

日志名称:“系统
机器名称 : LAPTOP
提供商名称:Microsoft-Windows-Kernel-Power
级别显示名称:信息
消息:系统会话已从 186 转换为 188.原因InputPoUserPresent
引导 ID:67"

我哪里出错了?理想情况下,我希望警报的每个元素(即 LogName、MachineName 等)成为键,信息成为值

python arrays json python-3.x event-log
1个回答
0
投票

在不同阶段使用打印语句来解决此问题。首先,尝试从

打印“匹配”
matches = event_pattern.findall(log_content)

如果这就是您想要的,请继续。 打印“行”并确保它是您想要的。

    for match in matches:
        event_dict = {}
        lines = match.split('\n')

使用该方法,你就会得到它。

© www.soinside.com 2019 - 2024. All rights reserved.