2016-07-14 39 views
0

我打算爲日誌文件編寫一個解析器,其中每行都是一個JSON記錄。如何高效地解碼大量的小JSON數據塊?

我可以在一個循環中的每一行解碼:

logs = [json.loads(line) for line in lines] 

或者我可以一氣呵成的整個文件進行解碼:

logs = json.loads('[' + ','.join(lines) + ']') 

我希望儘量減少執行時間,請忽略其他因素。有沒有任何理由更喜歡一種方法而不是另一種?

+0

我認爲一次解碼整個文件的速度更快,因爲它避免了一個潛在的慢循環(但它不太pythonic),但是你最好應該嘗試自己的解決方案和基準它。 – Delgan

回答

3

您可以輕鬆地timeit測試:

$ python -m timeit -s 'import json; lines = ["{\"foo\":\"bar\"}"] * 1000' '[json.loads(line) for line in lines]' 
100 loops, best of 3: 2.22 msec per loop 
$ python -m timeit -s 'import json; lines = ["{\"foo\":\"bar\"}"] * 1000' "json.loads('[' + ','.join(lines) + ']')" 
1000 loops, best of 3: 839 usec per loop 

在這種情況下,結合數據並解析它一次快一倍。

+0

這些數字令人信服。接受答案。 – VPfB

0

您可以將日誌作爲JSON字典。 像

{  
"log":{ 
    "line1":{...} 
    "line2":{...} 
    ... 
    } 
} 

然後做this解釋如何轉換和使用JSON到詞典在Python

這樣你就可以直接使用它,而解析

相關問題