我打算爲日誌文件編寫一個解析器,其中每行都是一個JSON記錄。如何高效地解碼大量的小JSON數據塊?
我可以在一個循環中的每一行解碼:
logs = [json.loads(line) for line in lines]
或者我可以一氣呵成的整個文件進行解碼:
logs = json.loads('[' + ','.join(lines) + ']')
我希望儘量減少執行時間,請忽略其他因素。有沒有任何理由更喜歡一種方法而不是另一種?
我打算爲日誌文件編寫一個解析器,其中每行都是一個JSON記錄。如何高效地解碼大量的小JSON數據塊?
我可以在一個循環中的每一行解碼:
logs = [json.loads(line) for line in lines]
或者我可以一氣呵成的整個文件進行解碼:
logs = json.loads('[' + ','.join(lines) + ']')
我希望儘量減少執行時間,請忽略其他因素。有沒有任何理由更喜歡一種方法而不是另一種?
您可以輕鬆地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
在這種情況下,結合數據並解析它一次快一倍。
這些數字令人信服。接受答案。 – VPfB
您可以將日誌作爲JSON字典。 像
{
"log":{
"line1":{...}
"line2":{...}
...
}
}
然後做this解釋如何轉換和使用JSON到詞典在Python
這樣你就可以直接使用它,而解析
我認爲一次解碼整個文件的速度更快,因爲它避免了一個潛在的慢循環(但它不太pythonic),但是你最好應該嘗試自己的解決方案和基準它。 – Delgan