当前位置:  开发笔记 > 编程语言 > 正文

如何获取日志字符串的最后一部分并将其解释为json?

如何解决《如何获取日志字符串的最后一部分并将其解释为json?》经验,为你挑选了2个好方法。

我正在查看具有以下格式的日志消息

datetime log_message_type message_type server {json_string}

因此每一行用空格分隔,每行总是有相同的字段,最后有一个json字符串,json块内有各种字段.

我想过这么简单

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 string"部分,然后保留其余部分?我试过做类似的事情

line = re.compile(".*\s.*\s.*\s.*\s").split(x)

尝试在json字符串部分之前基于4个空格来解析行,但是我恐怕我对python中的正则表达式系统是如何工作的还不够了解.有人能帮我一把吗?

编辑:忘了提,我为此坚持使用python 2.7.



1> Jean-Françoi..:

限制分割数量:

line = x.split(maxsplit=4)

>>> "a b c d my json expression".split(maxsplit=4)
['a', 'b', 'c', 'd', 'my json expression']

注意:python 2参数不同,你必须作为位置传递(也适用于python 3 BTW):

line = x.split(None,4)



2> Noufal Ibrah..:

尝试这样的事情.正则表达式很快就会失控.

log_line = "datetime log_message_type message_type server {json_string}"
json_part = log_line.split(None, 4)[-1]

推荐阅读
吻过彩虹的脸_378
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有