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

标签 python json regex

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

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/

相关文章:

java - 如何使用 Java 正则表达式从 URI 中提取 UUID

python - ffmpeg 创建的 mp4 无法与 IPython.display.Video 一起播放

python - 在 python 3 中打开文件奇怪错误

java - JSONObject JSON 数组长度

arrays - 在 Azure 数据工厂中将 JSON 文件从平面数组转换为嵌套数组

ruby - 正则表达式非字母数字但不是德语字符

python - 如何使用数据类避免意外参数警告

python 将字符串时间转换为sql日期时间格式

javascript - REST API 服务器应该接收 JSON 数据还是使用 PUT 的普通格式数据?

regex - 从左到右阅读时,a 和 b 的数量相同,但一个字母的数量不得超过另一个字母的三个以上