为什么我的脚本无法将json文件的全部内容打印到csv

时间:2019-03-25 01:39:01

标签: python-3.x

我有一些需要转换为csv的json文件。

我写了一个非常简单的脚本,但结果出乎意料。我没有将json文件的所有内容都写到csv文件中,而是仅获得顶级名称,每个字母之间用逗号分隔。这是json文件的内容:

{"drivers": [{"id": 91907, "groupId": 9039, "vehicleId": 212014918234488, "username": "abrauer"},
 {"id": 134763, "groupId": 9039, "vehicleId": 212014918234742, "username": "abarbosa"},
 {"id": 134764, "groupId": 9039, "vehicleId": 212014918234709, "username": "btoole"},
 {"id": 134766, "groupId": 9039, "vehicleId": 212014918234773, "username": "bheinsohn"}]}

和代码:

import csv
import json

infile = open("driver.json","r")
outfile = open("driver.csv","w")

writer = csv.writer(outfile)
for row in json.loads(infile.read()):

    writer.writerow(row)

结果如下:

d,r,i,v,e,r,s。我应该在尝试转换之前从文件中删除{“ drivers”:吗?

更新... 我尝试从文件中删除{“ drivers”:以及结尾的'}',结果也很奇怪。现在,我得到的只是没有值的属性。

id,groupId,vehicleId,username
id,groupId,vehicleId,username
id,groupId,vehicleId,username
id,groupId,vehicleId,username

1 个答案:

答案 0 :(得分:0)

发生的事情是,您的for循环正在json字典的键上进行迭代,因此您正在调用writer.writerow('drivers')。由于字符串在python中是可迭代的,因此writer.writerow会在驱动程序中的每一列中解释每个字符。

处理此问题的最佳方法是使用csv.writer对象(Docs)代替使用csv.DictWriter对象。您的代码将如下所示:

with open('driver.csv','w') as csv_f:
     drivers = json.loads(infile.read())['drivers']
     fields = list(drivers[0].keys())

     dict_writer = csv.DictWriter(csv_f, fieldnames=fields)

     dict_writer.writeheader()
     for driver in drivers:
          dict_writer.writerow(driver)