Python 类型错误:'_csv.writer'对象不可迭代



我正在将json解析为csv。但我得到的错误如下:

for i in data:
TypeError: '_csv.writer' object is not iterable

代码:

import json
import csv
with open("Data.json", 'r') as file:
data = json.load(file)
CSV_File = 'Data.csv'
with open(CSV_File, 'w') as file:
data = csv.writer(file)
data.writerow([])
for i in data:
data.writerow([])

数据

{"id":"kljhfksdhkhd","name":"BOB","生日":"1993年3月8日","语言":[{"id":"106059522759137","name":"英语"},{"id":"107617475934611","name":"泰卢固语"},{"id":"112969428713061","name":"印地语"},{"id":"343306413260","name":"泰米尔语"},{"id":"100904156616786","name":"卡纳达语"}],"游戏":{"数据":[{"name":"现代作战","id":"12134323","created_time":"2019-02-21T18:39:41+0000"},{"name":"Cards","id":"343232","created_time":"2011-06-01T11:13:31+000"},{"name":"穿梭羽毛球","id":"43214321","created_time":"2011-06-01T11:13:31+000"},{"name":"Carrom","id":"49y497","created_time":"2011-06-01T11:13:31+000"},{"name":"国际象棋","id":"0984080830","created_time":"2011-06-01T11:13:31+000"}],"分页":{"游标":{"之前":"dkkskd","在":"dlldlkd"}}}}

首先,名称data已分配给两个不同的对象。Python允许这样做,每次赋值都会覆盖上一次。在代码中,data最初是json文件中的数据,然后是csv.writer实例。因此,一个合理的改进是将编写器命名为writer,并相应地更改代码:

import json
import csv
with open("Data.json", 'r') as file:
data = json.load(file)
CSV_File = 'Data.csv'
with open(CSV_File, 'w') as file:
writer = csv.writer(file)
writer.writerow([])
for i in data:
writer.writerow([])

现在让我们来处理如何写入文件。writer.writerow需要一个列表,但编写一个空列表:writer.writerow([])不是很有用。可能您想将json数据写入csv文件,所以leet去掉空列表,并缩进写入循环,使其位于with块内(否则文件将关闭(。

import json
import csv
with open("Data.json", 'r') as file:
data = json.load(file)
CSV_File = 'Data.csv'
with open(CSV_File, 'w') as file:
writer = csv.writer(file)
for row in data:
writer.writerow(row)

如果json数据是列表列表,也就是说,它看起来像这样:

[[...], [...], [...], ...]

因为外部列表的每个元素都是一个列表,所以对它进行迭代(for row in data:(会产生一个列表(writer.writerow可以处理(。然而,json数据以字典的形式出现并不罕见:

{"k1": [....], "k2": [...], "k3": [...], ...}

在这种情况下,如果字典的值为list:,则可能需要对其进行迭代

for row in data.values():
writer.writerow(row)

最后,json可能是列表和字典的不规则混合,并且可能是任意嵌套的。如何将嵌套的json数据映射到平面csv格式取决于您。

最新更新