这里的大多数示例都显示了硬编码的列而不是迭代。我有 73 列我想在 JSON 中进行迭代和正确表达。
import csv
import json
CSV_yearly = r'C:\path\yearly.csv'
JSON_yearly = r'C:\path\json_yearly.json'
with open(CSV_yearly, 'r') as csv_file:
reader = csv.DictReader(csv_file)
with open(JSON_yearly, 'w') as json_file:
for row in reader:
json_file.write(json.dumps(row) + ',' + '\n')
print "done"
尽管这会创建一个 json 文件,但它的作用不正确。我看到了一些示例,其中读者内部的参数请求列表,但我不想从 csv 中输入 73 列。我的猜测是代码行云开始之间with
和reader
。
您的代码将文件中的每一行创建为一个单独的 JSON 对象(有时称为 JsonL 或 json-lines 格式)。收集列表中的行,然后序列化为 JSON:
with open(CSV_yearly, 'r') as csv_file:
reader = csv.DictReader(csv_file)
with open(JSON_yearly, 'w') as json_file:
rows = list(reader)
json.dump(rows, json_file)
请注意,JSON 的某些使用者希望将对象而不是列表作为外部容器,在这种情况下,您的数据必须是
rows = {'data': list(reader)}
更新: - 来自评论的问题
csv.DictReader
使用标准的 Python 字典来创建行,因此在 3.7 之前的 Python 版本中,键的顺序是任意的。如果必须保留键顺序,请尝试使用OrderedDict:
from collections import OrderedDict
out = []
with open('mycsv.csv', 'rb') as f:
reader = csv.reader(f)
headings = next(reader) # Assumes first row is headings, otherwise supply your own list
for row in reader:
od = OrderedDict(zip(headings, row))
out.append(od)
# dump out to file using json module
请注意,虽然这可能会输出具有所需键顺序的 json,但 json 的使用者不需要遵守它。
来自 csv 的所有值都作为字符串读取。如果您想要不同的类型,那么您需要在读取 csv 文件后执行必要的转换。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句