2016-06-11 111 views
-1

我有一個日誌文件(稱爲preprocstats.log),我想知道如何使用Python 2.6將其解析爲JSON格式文件。如何解析日誌文件到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) 
+1

SO既不是代碼編寫,也不教程服務。 – jonrsharpe

+0

我知道,你能寄給我一些幫助我做這件事的文件嗎?或告訴我能讀什麼..我搜索了很多東西,但它不幫助我.. – fornikador

+0

請求查找異地教程和文檔也是脫離主題,請參見[問]。 – jonrsharpe

回答

0

該解決方案特定於該問題。我認爲第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}, {}] 
+0

非常感謝Rahul,這就是我想要的:) – fornikador

0

有做到這一點的方法不止一種。我可能會使用.splitlines()方法,然後遍歷這些行並使用line.split()將其內容分隔到空格處,此時您可以根據需要指定值。如果這些價值本身可能包含空間,那麼這種方法就不能很好地工作,有時不會產生預期的產出。此時,您可以嘗試使用split(delimiter)進行試驗或嘗試使用正則表達式。沒有正確的方法來做到這一點,但即使有些可能更有效率,我認爲你明白了。