Python TypeError: '_csv.writer' 对象不可迭代。

问题描述 投票:0回答:1

我正在将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", "生日", "08031993", "语言": "08031993", "语言": [ { "id": "106059522759137", "name": "英语" }, { "id": "107617475934611", "name": "泰卢固语" }, { "id": "112969428713061", "name": "English language": "112969428713061", "name": "印地语" }, { "id": "343306413260", "name": "name": "343306413260", "name": "Tamil language" }, { "id": "112969428713061", "name": "印地语": "泰米尔语" }, { "id": "100904156616786", "name": "Tamil language": "100904156616786", "name": "Kannada" } ], "游戏": { "data": [ { "name": "Modern Combat", "id": "12134323", "created_time": { "name": "Modern Combat": "12134323", "created_time": "2019-02-21T18:39:41+0000" }, { "name": "卡", "id": "343232", "created_time": "2011-06-01T11:13:31+0000" }, { "name": "穿梭羽毛球", "id": "43214321", "created_time": "2011-06-01T11 31+0000"}, { "name":: "Shuttle Badminton", "id": "43214321", "created_time", "2011-06-01T11:13:31+0000" }, { "name": "Shuttle Badminton", "id": "43214321", "created_time": "2011-06-01T11:13:31+0000" }, { "name": "Carrom", "id": "49y497", "created_time", "2011-06-01T11:13:31+0000" }, { "name": "Carrom", "id": "49y497", "created_time": "2011-06-01T11:13:31+0000" }, { "name": "国际象棋", "id": "0984080830", "created_time", "2011-06-01T11:13:31+0000" }, { "name": "Chess", "id": "0984080830", "created_time": "2011-06-01T11:13:31+0000" } ], "分页": { "cursors": { "before": "dkkskd", "after": { "cursors": "before": "dkkskd", "after": "dlldlkd" } } } }

python json csv
1个回答
1
投票

首先,名称 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文件中,所以让我们去掉空列表,并缩进写入循环,使其位于 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": [...], ...}

在这种情况下,你可能会想要遍历字典中的 价值观,如果它们是列表的话。

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

最后,json可能是列表和字典的不规则混合,也可能是任意嵌套的。 如何将嵌套的json数据映射到扁平的csv格式,由你来决定。

© www.soinside.com 2019 - 2024. All rights reserved.