Python TypeError:“_csv.writer”对象不可迭代

Posted

技术标签:

【中文标题】Python TypeError:“_csv.writer”对象不可迭代【英文标题】:Python TypeError: '_csv.writer' object is not iterable 【发布时间】:2020-05-02 13:40:59 【问题描述】:

我正在将 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”, “名称”:“鲍勃”, “生日”:“1993 年 8 月 3 日”, “语言”:[ "id": "106059522759137", “名称”:“英语” , "id": "107617475934611", “名称”:“泰卢固语” , "id": "112969428713061", “名称”:“印地语” , "id": "343306413260", “名称”:“泰米尔语” , "id": "100904156616786", “名称”:“卡纳达语” ], “游戏”: “数据”: [ "name": "现代战斗", “id”:“12134323”, “created_time”:“2019-02-21T18:39:41+0000” , “名称”:“卡片”, “id”:“343232”, “created_time”:“2011-06-01T11:13:31+0000” , "name": "穿梭羽毛球", “id”:“43214321”, “created_time”:“2011-06-01T11:13:31+0000” , “名称”:“卡罗姆”, “id”:“49y497”, “created_time”:“2011-06-01T11:13:31+0000” , “名称”:“国际象棋”, "id": "0984080830", “created_time”:“2011-06-01T11:13:31+0000” ], “分页”: “光标”: “之前”:“dkkskd”, “之后”:“dlldlkd”

【问题讨论】:

错误信息提示 json 文件为空。此外,不确定将所有变量命名为 data 是否会有所帮助。 没有文件有数据,不是空的 是json吗?可以分享一下样品吗? 我的错,文件是空的。现在任何得到另一个错误。你能帮我吗,更新了他的错误 "不确定命名所有变量data会有帮助" 【参考方案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 文件,所以 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": [...], ...

在这种情况下,您可能需要遍历字典的 ,如果它们是列表:

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

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

【讨论】:

感谢您的快速审核。但它没有帮助。附上我的数据,请查看并提供帮助

以上是关于Python TypeError:“_csv.writer”对象不可迭代的主要内容,如果未能解决你的问题,请参考以下文章

Python - TypeError:需要可迭代参数

TypeError:实例Python之间不支持'<'

python fbprophet错误,TypeError:'module'对象不可调用

TypeError:“NoneType”对象在 Python 中不可迭代

“TypeError:'WebElement'对象不可迭代”错误代码python爬取

TypeError:'int'对象不可迭代,使用 Python 3 [关闭]