【问题标题】:Python TypeError: '_csv.writer' object is not iterablePython TypeError:“_csv.writer”对象不可迭代
【发布时间】: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会有帮助"

标签: python json csv


【解决方案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 格式。

【讨论】:

  • 感谢您的快速审核。但它没有帮助。附上我的数据,请查看并提供帮助
猜你喜欢
  • 2021-12-13
  • 2015-04-06
  • 2013-10-31
  • 2017-08-29
  • 2018-06-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多