【问题标题】:how to write multiple JSON files into one csv?如何将多个 JSON 文件写入一个 csv?
【发布时间】:2017-10-10 03:03:26
【问题描述】:

我找不到任何答案(

我已经从 web 解析了 json,这个语法 {"a" : 1, "b" : 2, "c" : 3} 并将其转换为字典。

url = 'some.url/1'
data = requests.get(url=url)

binary = data.content

output = json.loads(binary)

我有常规的字典。 现在我需要将“a”和“c”写入csv文件,但最困难的问题是我必须对这个函数进行多次迭代,即从some.url/1到some.url/100,并且所有输出数据必须在一个文件中,我该怎么做?

非常感谢

【问题讨论】:

  • 使用从每个文件读取 JSON 的循环,然后从该 JSON 将一行写入 CSV 文件。
  • data 是否会为每个 url 包含相同的静态结构 {"a" : ..., "b" : ..., "c" : ...}
  • 请问您为什么不将其保存在 JSON 中? (好奇)

标签: python json csv


【解决方案1】:

使用DictWriter,假设所有文档的结构一致:

import csv
import requests

with open('outfile.csv', 'wb') as outfile:
    fieldnames = ['a', 'b', 'c']
    writer = csv.DictWriter(outfile, fieldnames=fieldnames)

    # write the headers, optionally
    writer.writeheader()

    for i in range(1, 101):
        # do you stuff to fetch data
        url = 'some.url/%i' % i
        data = requests.get(url=url)
        binary = data.content
        output = json.loads(binary)

        # now write
        writer.writerow(output)

【讨论】:

    【解决方案2】:

    我只是要发布一个您保留 json 的示例:

    import random
    import json
    
    output = {}
    
    for url in ["url1","url2"]:
        r = {"a" : random.randint(1,10), "b" : random.randint(1,10), "c" : random.randint(1,10)}
        del r["c"]
        output[url] = r
    
    json.dumps(output)
    
    
    #with open("output.json","w") as f:
    #    f.write(json.dumps(output))
    

    返回

    '{"url1": {"a": 10, "b": 4}, "url2": {"a": 6, "b": 7}}'
    

    这可以加载到熊猫数据框中:

    import pandas as pd
    df = pd.read_json("output.json").T
    print(df)
    
            a   b
    url1    10  6
    url2    10  5
    

    从这里你可以进行各种操作...

    【讨论】:

      【解决方案3】:

      使用从 1 到 100 的循环。将循环变量附加到 URL,获取 JSON,对其进行解析,然后将所需内容写入 CSV。

      with open('output.csv', 'w') as f:
          csvfile = csv.writer(f)
          for i in range(1, 101):
              url = 'some.url/' + str(i)
              data = requests.get(url=url)
              output = json.loads(data.content)
              csvfile.writerow([output['a'], output['c']])
      

      【讨论】:

      • 我有错误 dict 包含不在字段名中的字段:1、2,但是当我从第一个答案开始代码时,它是完整的,没关系,有什么问题?
      • 我不确定您为什么会收到该错误。我的答案使用Writer,而不是DictWriter,因此它希望该行是一个列表。
      猜你喜欢
      • 1970-01-01
      • 2021-03-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-18
      • 2016-08-03
      • 1970-01-01
      • 2017-09-02
      相关资源
      最近更新 更多