【发布时间】: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 的基础知识。在这种情况下,您需要了解继承(
DictReaderextendsreader)、迭代器(reader是一个迭代器类)和流(json和csv模块都使用它们)。我不会去投票给你,但它真的太宽泛而无法回答。 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 对象。