Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 将大括号内的邮件拆分为多行的最佳方法?_Python_Json_Regex_Unix - Fatal编程技术网

Python 将大括号内的邮件拆分为多行的最佳方法?

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(

我有以下文件,应该是多行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('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