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 fbprophet错误,TypeError:'module'对象不可调用
TypeError:“NoneType”对象在 Python 中不可迭代