如何将日志文件解析为JSON

时间:2016-06-11 18:51:54

标签: python json

我有一个日志文件(名为preprocstats.log),我想知道如何使用Python 2.6将其解析为JSON格式文件。

日志文件的输入是:

Preprocessor Profile Statistics (all)
==========================================================
Num            Preprocessor Layer     Checks      Exits  
===            ============ =====     ======      =====  
 1              httpinspect     0          1          1  
 2                   detect     0         33         33   
... (and more rows)

我想将它解析为JSON,例如使用此输出:

{"Num": 1, "Preprocessor": "httpinspect", "Layer": 0, "Checks": 1,   "Exits": 1}
{"Num": 2, "Preprocessor": "detect", "Layer": 0, "Checks": 33, "Exits": 33}
... (and the rest of rows)

2 个答案:

答案 0 :(得分:1)

此问题的解决方案。我认为第3行包含结果的键值,第5行包含值的开始,直到文件末尾才可用。

这是我的代码:

import json 
a = open('abc.log','r')
text = a.read()
text_as_list = text.split('\n')
keys = text_as_list[2].split()
result = []
for item in text.split('\n')[4:len(text_as_list)]:
    temp_dict = {}  
    for i,j in zip(keys,item.split()):  
        if j.isdigit():         
            temp_dict[i] = int(j)
        else:
            temp_dict[i] = j
    result.append(temp_dict)
print json.dumps(result)

结果:

[{"Layer": 0, "Num": 1, "Preprocessor": "httpinspect", "Exits": 1, "Checks": 1}, 
{"Layer": 0, "Num": 2, "Preprocessor": "detect", "Exits": 33, "Checks": 33}, {}]

答案 1 :(得分:0)

有多种方法可以做到这一点。我可能会使用.splitlines()方法,然后遍历这些行并使用line.split()将其内容拆分到空格处,此时您可以根据需要分配值。如果这些值本身可以包含空格,则该方法不再适用,有时不会产生预期的输出。此时,您可以尝试使用split(delimiter)进行试验,也可以尝试使用正则表达式。没有正确的方法可以做到这一点,但即使有些可能更有效,我认为你明白了。