簡體   English   中英

Python TypeError: '_csv.writer' object 不可迭代

[英]Python TypeError: '_csv.writer' object is not iterable

我正在將 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”,“名稱”:“BOB”,“生日”:“08/03/1993”,“語言”:[ {“id”:“106059522759137”,“名稱”:“英語" }, { "id": "107617475934611", "name": "泰盧固語" }, { "id": "112969428713061", "name": "印地語" }, { "id": "343306413260", "名稱”:“泰米爾語”},{“id”:“100904156616786”,“名稱”:“卡納達語”}],“游戲”:{“數據”:[{“名稱”:“現代戰斗”,“id ": "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:13:31+0000" }, {"名稱”:“卡羅姆”,“id”:“49y497”,“created_time”:“2011-06-01T11:13:31+0000”},{“名稱”:“國際象棋”,“id”:“0984080830” , "created_time": "2011-06-01T11:13:31+0000" } ], "paging": { "cursors": { "before": "dkkskd", "after": "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": [...], ...}

在這種情況下,您可能希望遍歷字典的values ,如果它們是列表:

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

最后,json 可能是列表和字典的不規則混合,可以任意嵌套。 由您決定如何將 map 嵌套的 json 數據轉換為平面 csv 格式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM