AttributeError:“str”对象没有属性“keys”

数据挖掘 Python json
2022-03-02 19:12:57

将 json 文件转换为 csv 时,出现上述错误我的代码如下所示:

import json
import csv
data = open("SRInFlow.json",encoding="utf8")
rows = json.loads(data.read())
r=rows.values()
fieldnames = [b'dateTimeValues', b'timeSeries']
with open('C:/DeepLearning/tensorflowpoc/Codes/SRInFlow.csv', 'w') as f:
    dict_writer = csv.DictWriter(f, fieldnames=fieldnames)
    dict_writer.writeheader()
    for d in r:
  --->    dict_writer.writerow(d)

错误显示在最后一行。如何纠正错误?提前致谢

1个回答

此错误是因为您正在初始化一个字典编写器,但是当编写器需要一个包含键的字典时,dict_writer = csv.DictWriter(f, fieldnames=fieldnames)您传递了一个仅包含值r=rows.values()-> for d in r:->的普通行。dict_writer.writerow(d)这就是错误的意思。

我不知道你的 JSON 看起来如何,但你可以尝试这样的事情:

import json
import csv

data = '{"dateTimeValues": [1,3,4], "timeSeries": [0,0,0]}'
rows = json.loads(data)

r=zip(*rows.values())

fieldnames = ['dateTimeValues', 'timeSeries']
with open('c:/Users/jsz.P3-GROUP/Desktop/shit.csv', 'w') as f:
    dict_writer = csv.writer(f)
    dict_writer.writerow(fieldnames)
    for d in r:
        dict_writer.writerow(d)

这会初始化一个简单的 csv 编写器dict_writer = csv.writer(f)(不是字典),然后将字段名输入为标题的普通行,dict_writer.writerow(fieldnames)最后只插入示例中的值。

请注意,对于我的 json 字符串,我必须先将值转置为r=zip(*rows.values()).

希望这可以帮助。