我有一个日志文件(名为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)
答案 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)
进行试验,也可以尝试使用正则表达式。没有正确的方法可以做到这一点,但即使有些可能更有效,我认为你明白了。