如何使用python将大型Json文件转换为csv

时间:2016-09-21 09:14:38

标签: python json csv dictionary

(Python 3.5) 我试图将一个大型用户review.json文件(1.3gb)解析为python并转换为.csv文件。我曾尝试在线寻找一个简单的转换器工具,其中大多数都接受最大1Mb的文件大小或超级昂贵。  因为我对python很新,我想我会问2个问题。

  1. 这样做是否可行/有效,还是应该寻找其他方法?

  2. 我尝试了以下代码,它只是在我的.json doc中读取并写入前342行,然后返回错误。

  3.   

    块引用     文件" C:\ Anaconda3 \ lib \ json__init __。py",第319行,在载入中       return _default_decoder.decode(s)

    文件" C:\ Anaconda3 \ lib \ json \ decoder.py",第342行,解码     引发JSONDecodeError("额外数据",s,结束) JSONDecodeError:额外数据

    这是使用

    的代码
    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"?或者我在做梦。

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

2 个答案:

答案 0 :(得分:0)

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

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

答案 1 :(得分:0)

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

答案是使用raw_decode的{​​{1}}方法一次从文件中获取JSON定义。这适用于任何一组连接的有效JSON定义。我在这里的回答中对此进行了进一步描述:Importing wrongly concatenated JSONs in python