2016-09-21 140 views
0

(Python 3.5) 我想将大型用户review.json文件(1.3gb)解析为python并转换为.csv文件。我曾尝试在网上寻找一个简单的转换器工具,其中大部分接受最大1Mb的文件大小或超级昂贵。 因为我相当新的python我想我问2个问题。如何使用python将大型Json文件转换为csv

  1. 它是甚至可能/有效的,或者我应该寻找另一种方法?

  2. 我试过下面的代码,它只是读取并写入我的.json文档中的顶部342行,然后返回一个错误。

Blockquote File "C:\Anaconda3\lib\json__init__.py", line 319, in loads return _default_decoder.decode(s)

文件 “C:\ Anaconda3 \ lib中\ JSON \ decoder.py”,线路342,在解码 提高JSONDecodeError( “额外数据”,S,结束) JSONDecodeError:额外数据

这是使用代码IM

import csv 
import json 

infile = open("myfile.json","r") 
outfile = open ("myfile.csv","w") 

writer = csv.writer(outfile) 

for row in json.loads(infile.read()): 
    writer.writerow(row) 

我以.json例如:

链接到的Json

我的想法小部分是它的某种类型相关的错误我的for循环,与json.loads ...但我不知道有足够的了解它。是否可以创建一个字典{}并仅转换值“user_id”,“stars”,“text”?或者我在做梦。

任何建议或批评表示赞赏。

回答

0

这不是JSON文件;这是一个包含JSON单独行的文件。你应该分别解析每一行。

for row in infile: 
    data = json.loads(row) 
    writer.writerow(data) 
+0

非常感谢Daniel的回复。但是,创建的.csv文件的结果只包含Keys not values。(user_id,stars,type,review_id,business_id,votes,date,text)有一种方法可以将值添加到键{key:value} ...?我应该尝试使用字典吗?因为我只需要“user_id”,“stars”,“text”的值 –

+0

CSV不是键值结构。您需要挑选出您需要的各种数据;例如'data_to_write = [data [“votes”] [“funny”],data [“user_id”],data [“text”]]等等。 –

+0

感谢您的支持+1 –

0

有时它不像每行输入有一个JSON定义那样容易。 JSON定义可以分散到多行,并且不一定很容易确定哪一行是逐行读取的开始和结束括号(例如,如果存在包含大括号或嵌套结构的字符串)。

答案是使用raw_decode方法json.JSONDecoder从文件中一次获取一个JSON定义。这将适用于任何一组串联的有效JSON定义。在我的回答中有进一步的描述:Importing wrongly concatenated JSONs in python