2016-07-14 8 views
0

私は、各行が1つのJSONレコードであるログファイル用のパーサーを作成します。多数の小さなJSONデータチャンクを効率的にデコードするにはどうすればいいですか?

私はループ内の各ラインをデコードすることができ

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

または私は一度にファイル全体をデコードすることができます:

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

は、私は、実行時間を最小限にしたい、他の要因を無視してください。あるアプローチを他のものよりも優先させる理由はありますか?

+0

私は、潜在的に遅いループを避けるため、ファイル全体をデコードする方が速いと思っていますが、それは解決策とベンチマークの両方をお試しください。 – 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 

この場合、データを結合して1回解析すると、約2.5倍速くなります。

+0

これらの数字は説得力があります。回答が受け入れられました。 – VPfB

0

ログをJSON辞書として作成することができます。

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

同様 そして、Pythonの

で辞書にJSONに変換して使用する方法について説明し this

を行うですから、

関連する問題