Python 将大括号内的邮件拆分为多行的最佳方法?
我有以下文件,应该是多行json文件,但所有内容都在一行中:Python 将大括号内的邮件拆分为多行的最佳方法?,python,json,regex,unix,Python,Json,Regex,Unix,我有以下文件,应该是多行json文件,但所有内容都在一行中: {"id":0, "val":123}{"id":1,"val":345}{"id":2, "val":3434}.... 为了将其加载到python中进行分析,我需要首先将其分成多行,如下所示: {"id":0, "val":123} {"id":1,"val":345} {"id":2, "val":3434} ... 这样做的最佳工具是什么?啊?塞德?python?只需使用python和。像这样替换函数 with open(
{"id":0, "val":123}{"id":1,"val":345}{"id":2, "val":3434}....
为了将其加载到python中进行分析,我需要首先将其分成多行,如下所示:
{"id":0, "val":123}
{"id":1,"val":345}
{"id":2, "val":3434}
...
这样做的最佳工具是什么?啊?塞德?python?只需使用python和
。像这样替换函数
with open('filename') as f:
text = f.read().replace('}', '}\n')
with open('filename.edit', 'w') as f:
f.write(text)
这将在}
之后添加\n
。您可以使用regex lookarounds拆分字符串,例如:
(?<=})(?={)
(?对于unix工具,请使用awk:
awk -v RS='}' 'NF{print $0 "}"}' file
{"id":0, "val":123}
{"id":1,"val":345}
{"id":2, "val":3434}
或gnu-sed:
sed 's/}/&\n/g' file
{"id":0, "val":123}
{"id":1,"val":345}
{"id":2, "val":3434}
这里最简单的方法似乎是使用正则表达式——这样可以节省编写任何代码的必要性
例如,在Vim中,您可以使用如下内容:%s/}/}\r/g
在任何其他编辑器中,都应该有\n
而不是\r
,我想也许您的输入非常简单,基于正则表达式的方法就足够了,但这是完成您描述的一般任务的最佳方法(即,从JSON流生成JSONLINE)就是使用JSON感知工具。jq就是其中之一。无论如何,以下是简单、快速和有效的:
$ jq -c . input.json
当然,输出可以重定向到文件
(有一个警告:jq将输入数字转换为IEEE 754 64位数字,因此输入端的1e1000将成为其输出端的IEEE 754 64位近似值。)
有关jq的详细信息,请参见我相信一个regex
模块对于这种方法的工作是必要的。re
不能用空字符串拆分。你在代码中尝试过吗?嗨@Stribizev,我刚刚写的想法不是一个完全有效的示例。现在更新了,感谢你的评论。我似乎误解了我,有一个。字符串不是split:[u'{“id”:0,val:123}{“id”:1,val:345}{“id”:2,val:3434}]
@stribizev噢,非常感谢你的代码。我不知道……我是一个java人哈哈。我刚刚更新了代码。
$ jq -c . input.json