我正在查看具有以下格式的日志消息
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.
限制分割数量:
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)
尝试这样的事情.正则表达式很快就会失控.
log_line = "datetime log_message_type message_type server {json_string}" json_part = log_line.split(None, 4)[-1]