解压缩.gz文件以创建新行分隔的json文件-创建新行时遇到问题

时间:2019-07-12 14:41:48

标签: python json gzip gz

我正在尝试解压缩gzip文件,以便只剩下一个包含许多json文件的文件,每个文件都在自己的一行上。但是,当我尝试在添加json文件后添加新行'\ n'时,没有任何反应。我的代码在这里怎么了?

import gzip
import json

def load_file(file):
    if file.endswith('.gz'):
        with gzip.open(file, 'rb') as fff:
            file_content = fff.readlines()


    else:
        with open(file) as fileopen:
            file_content = fileopen.readlines()
    return file_content


loaded = load_file('9917-10137.gz')


x = []
for i in loaded:
    dictionary = json.loads(i)
    x.append(dictionary)
    x.append('\n')

print('x is',x)

with open('9917-10137convert.json', 'w') as file:
     file.write(json.dumps(x))

代码只是完全忽略了我要创建的新行,将其打印出来使我所有的json都在同一行上。

2 个答案:

答案 0 :(得分:0)

我想您会发现您编写的JSON包含[{"string": "value"}, "\n", {"string": "value"}, "\n", ...],其中包含交替的字典和文字化JSON编码的换行符。要获得您似乎想要的内容,只需编写每个字典,然后写上文字(不是JSON编码)换行符即可。

with open('9917-10137convert.json', 'w') as file:
    for i in loaded:
        file.write(i)
        file.write('\n')

这应该产生一个http://jsonlines.org/

文件

答案 1 :(得分:0)

您应该尝试使用“ \\n”而不是“ \n”,因为由于JSON标准,json.dumps()使用\\n来编码换行符。

因此,可能更改此设置将解决您的问题。

 x.append('\n')

更多信息: https://docs.python.org/3/library/json.html#encoders-and-decoders