【问题标题】:Trying to understand the conversion from CSV to JSON in Python试图理解 Python 中从 CSV 到 JSON 的转换
【发布时间】:2014-05-03 04:18:13
【问题描述】:
import csv
import json
import sys

csv_file = open('a1.csv','rU')

fields = ["bacteria", "Penicillin", "Streptomycin", "Neomycin", "Gram_Staining"]
csv_reader = csv.DictReader(csv_file, fields)
json_file = open('json_out.json', 'w')

json_reader = json.dumps([r for r in csv_reader], indent=0)
jsontodict = json.loads(json_reader)
json_file.write(json_reader)

我正在将一个简短的 CSV 文件转换为 JSON,以便以后可以使用 D3 添加可视化。 该代码服务于它的目的,但我想了解它是如何工作的。 (它是从一个网站获得的)

Q1:DictReader 是否返回 DICT 对象?当我尝试打印返回对象时,它是一个“阅读器”对象;因此它无法打印,我无法对其进行操作(搜索等)。

Q2:如何用以下方法替换 json.dumps(...) 行? 对于 csv_reader 中的 r: json_reader=json.dumps([r], indent=0)

【问题讨论】:

  • 您的问题是一个有效的问题,但过于宽泛。为了理解所有底层操作,你必须了解 Python 的基础知识。在这种情况下,您需要了解继承(DictReader extends reader)、迭代器(reader 是一个迭代器类)和流(jsoncsv 模块都使用它们)。我不会去投票给你,但它真的太宽泛而无法回答。 Start at the top of the chain,然后按照文档提供的链接进行操作。
  • 提示:如果您对链的特定部分提出问题,您不了解,那么它适用于 Stack Overflow,您可能会获得质量答案。
  • 感谢您的回复。我正在阅读文档,但并没有完全遵循它。
  • 您介意展示我如何在 for 循环中编写“json_reader = json.dumps([r for r in csv_reader]”吗?我尝试了“for r in csv_reader: json_reader=json.dumps([ r])",但它会覆盖第一行。谢谢,
  • 你可以去stuff = [r for r in csv_reader]; json_reader = json.dumps(stuff)先收集所有数据,然后转储。在循环中一次转储一项是错误的,或者至少是不同的,因为它创建的是 JSON 对象流,而不是一个 JSON 对象。

标签: python json csv


【解决方案1】:

Q1:DictReader 返回一个阅读器对象——一个迭代器,它在每次迭代时返回一个字典。不能直接打印,但是 list(rdr) 会根据需要把它变成一个列表。

Q2:json.dumps(list(rdr), indent=0) ... [rdr] 表示包含 DictReader 的列表。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-19
    • 2020-01-12
    • 2016-07-27
    • 2021-08-21
    • 2013-07-05
    相关资源
    最近更新 更多