提问人:tthhhww 提问时间:11/15/2023 最后编辑:toyota Supratthhhww 更新时间:11/15/2023 访问量:45
使用 python 将日志 .txt 文件转换为 JSON
Converting a log.txt file to JSON using python
问:
我正在学习 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
{ “LogName” : “System”, “MachineName” : “LAPTOP” , “ProviderName” : “Intel”, “LevelDisplayName” : “Information”,
“Message: : ”检查剩余资源预算。模块 超出资源预算,无法分配FwCps,STATUS
= 系统资源不足,无法完成 API。事件 2 {
“LogName” : “System”,
“MachineName” : “LAPTOP” “ProviderName” : “Microsoft-Windows-Kernel-Power” “LevelDisplayName” : “Information” “Message”
: “系统会话已从 186 转换为 188. 原因 InputPoUserPresent
BootId:67”
}
但是,我的输出目前如下所示:
日志名称 : “系统计算机名称 : 笔记本电脑
提供程序名称 : Microsoft-Windows-内核-电源
级别显示名称 : 信息
消息 : 系统
会话已从 186 转换为 188. 原因 InputPoUserPresent
BootId:67”
我哪里出错了?理想情况下,我想要警报的每个元素,即 LogName、MachineName 等。作为键,信息是值
答:
在不同阶段使用 print 语句对此进行故障排除。首先,尝试打印来自
matches = event_pattern.findall(log_content)
如果这是你想要的,请继续前进。 打印“线条”并确保它是您想要的。
for match in matches:
event_dict = {}
lines = match.split('\n')
使用这种方法,你就会明白的。
评论