【问题标题】:How to convert a large Json file into a csv using python如何使用python将大型Json文件转换为csv
【发布时间】:2017-01-29 10:49:04
【问题描述】:

(Python 3.5) 我正在尝试将大型用户 review.json 文件(1.3gb)解析为 python 并转换为 .csv 文件。我尝试在网上寻找一个简单的转换器工具,其中大多数都接受最大 1Mb 的文件大小或者非常昂贵。 因为我对 python 还很陌生,所以我想我会问 2 个问题。

  1. 这样做是否可能/有效,还是我应该寻找另一种方法?

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

块引用 文件“C:\Anaconda3\lib\json__init__.py”,第 319 行,加载中 返回_default_decoder.decode(s)

文件“C:\Anaconda3\lib\json\decoder.py”,第 342 行,在解码中 raise JSONDecodeError("额外数据", s, end) 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”?还是我在做梦。

感谢任何建议或批评。

【问题讨论】:

    标签: python json csv dictionary


    【解决方案1】:

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

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

    【讨论】:

    • 非常感谢丹尼尔的回复。但是,创建的这个 .csv 文件的结果只包含键而不是值。(user_id、stars、type、review_id、business_id、votes、date、text)有一种方法可以将值添加到键 {key:value} ...?我应该尝试使用字典 {} 吗?因为我只需要“user_id”、“stars”、“text”的值
    • CSV 不是键值结构。您需要挑选出您需要的各个数据位;例如data_to_write = [data["votes"]["funny"], data["user_id"], data["text"]]
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 2018-07-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      • 2022-09-23
      • 2013-09-16
      相关资源
      最近更新 更多