我正在学习 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 等)成为键,信息成为值
在不同阶段使用打印语句来解决此问题。首先,尝试从
打印“匹配”matches = event_pattern.findall(log_content)
如果这就是您想要的,请继续。 打印“行”并确保它是您想要的。
for match in matches:
event_dict = {}
lines = match.split('\n')
使用该方法,你就会得到它。