【问题标题】:How to import data from nested JSON file to CSV?如何将嵌套 JSON 文件中的数据导入 CSV?
【发布时间】:2020-12-25 19:03:27
【问题描述】:

我有一个嵌套的 json 文件,我想使用 Python 将它的一些内容写入 csv 文件。我已经设法选择了我想要的数据,但我不明白如何让 Python 从所有索引中写入数据。换句话说,我一次只能从一个索引写入数据,我不明白如何选择所有索引。我尝试使用切片,但它给了我 TypeError(列表索引必须是整数或切片等)。你可以帮帮我吗?谢谢!

这是目前的代码(它可以工作,但它只写了 1 行,我有 87 行):

import json
import csv


json_file = open("unique_json.json", "r", encoding="utf-8")
csv_file = open("csv_format2.csv", "w", encoding="utf-8")

data = json.load(json_file)
write = csv.writer(csv_file)


contents = [[data[0]["node"]["display_url"]],
            [data[0]["node"]["edge_liked_by"]["count"]],
            [data[0]["node"]["edge_media_to_comment"]["count"]],
            [data[0]["node"]["taken_at_timestamp"]]]

headers = ["url", "likes", "comments", "timestamp"]

write.writerow(headers)

for i in contents:
    for j in i:
        print(j, end=",", file=csv_file)

json_file.close()
csv_file.close()

【问题讨论】:

  • 如果我理解正确的话,您拥有的每一行内容都是一个列表,然后包含在您命名为“内容”的列表中。那么你不能这样做:for row in contents: write.writerow(row) 吗?让我知道这是否没有意义。 :)
  • @AlexandrosGouvatsos:谢谢!我刚刚尝试过(替换我的 for 循环),但它只是将内容从一个索引打印到多行。仍然存在同样的问题:如何从所有其他索引中获取值? (共 87 个)。我的目标是让 csv 每个索引都有一行,并且每个索引在每个指定的标题下都有一个值。

标签: python json csv nested


【解决方案1】:

几件事:

  • 打开文件然后关闭它们的问题是,如果发生异常,您并没有关闭它们。为防止这种情况发生,您可以使用 with 语句,该语句将在您退出文件时处理关闭文件,即使出现异常也是如此。
  • 您创建了一个编写器,但随后在不使用该编写器的情况下自己解析了 CSV。我还将其命名为 writer 而不是 write
  • 您想为data 中的每个项目使用for 循环。
  • 我还避免创建一个我只会使用一次的变量。
  • 每行中的每个项目都有一组额外的方括号 ([]),这就是为什么要在其中添加第二个 for 循环。
import json
import csv


with open("unique_json.json", "r", encoding="utf-8") as json_file:
    data = json.load(json_file)

with open("csv_format2.csv", "w", encoding="utf-8") as csv_file
    writer = csv.writer(csv_file)

    writer.writerow(["url", "likes", "comments", "timestamp"])

    for row in data:
        writer.writerow([
            row["node"]["display_url"],
            row["node"]["edge_liked_by"]["count"],
            row["node"]["edge_media_to_comment"]["count"],
            row["node"]["taken_at_timestamp"],
        ])

【讨论】:

  • 谢谢! 不幸的是,我仍然是 Python 的初学者。这很有帮助。现在可以了。
  • 我注意到了。这就是为什么我评论了我在做的时候做了哪些改变,这样我就不会错过任何一个。如果您发现任何部分难以理解,请在 cmets 中询问。
猜你喜欢
  • 2019-07-09
  • 2019-02-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-29
  • 2018-08-14
  • 2014-10-03
  • 2019-12-02
相关资源
最近更新 更多