我要为日志文件编写一个解析器,其中每一行都是一个JSON记录。
我可以解码循环中的每一行:
logs = [json.loads(line) for line in lines]
或者我可以一次解码整个文件:
logs = json.loads('[' + ','.join(lines) + ']')
我想尽量缩短执行时间,请忽略其他因素。是否有理由更喜欢一种方法而不是另一种方法?
答案 0 :(得分: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
在这种情况下,将数据组合并解析它的速度大约快2.5倍。
答案 1 :(得分:0)
您可以将日志设为JSON字典。 喜欢
{
"log":{
"line1":{...}
"line2":{...}
...
}
}
然后执行this解释如何在Python中将JSON转换并使用到字典
所以你可以直接使用它而无需解析