我正在查看具有以下格式的日志消息
datetime log_message_type message_type server {json_string}
所以每一行都用空格分隔,每一行总是有相同的字段,最后有一个 json 字符串,在 json block 中包含各种字段。
我想过用一个简单的方法来做这个
with open('test.log', 'r') as f:
for x in f:
line = x.split()
datetime = line[0]
log_message_type = line[1]
message_type = line[2]
server = line[3]
json_string = line[4]
这会起作用,除非我的 json 字符串中有空格,例如,类似这样的东西。
{ "foo" : "bar" }
所以这样做会在空格处拆分我的 json 字符串。有没有什么办法可以使用正则表达式或其他东西来分割空格,直到我到达该行的“json 字符串”部分,然后保留它的其余部分?我试着做类似的事情
line = re.compile(".*\s.*\s.*\s.*\s").split(x)
尝试根据 json 字符串部分之前的 4 个空格来解析该行,但恐怕我对 python 中的正则表达式系统的工作原理了解不够。谁能帮帮我?
编辑:忘了说,为此我坚持使用 python 2.7。
最佳答案
限制拆分次数:
line = x.split(maxsplit=4)
>>> "a b c d my json expression".split(maxsplit=4)
['a', 'b', 'c', 'd', 'my json expression']
注意:python 2 参数不同,你必须将 then 作为位置传递(也适用于 python 3 BTW):
line = x.split(None,4)
关于python - 如何获取日志字符串的最后一部分并将其解释为 json?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41724304/