1 回答
TA贡献2016条经验 获得超9个赞
您的名称变量data最终应该是字典,而不是列表。因此,当您尝试执行“ for row in data:”时,您是在说“对字典中的每个键执行以下操作”,而不是针对列表中的项目!字典没有排序,但无论哪个键首先被选择为row,该命令都会失败,因为它无法在其中找到任何名为 " symmetrixID" 的内容。HostID例如,如果是循环中选取的第一个键,则row['symmetrixID']表示data['HostID']['symmetrixID']。
如果你仔细观察,字典中只有一个列表可以迭代,那就是data["perf_data"]. 所以尝试那里的循环。
所以暂时把你的数据放在一个字符串中:
s = """
{
"symmetrixID": "000123401234",
"HostID": "jupiter_ig",
"perf_data": [
{
"HostMBReads": 0.00024720083,
"timestamp": 1553637300000,
"Writes": 0.0,
"ReadResponseTime": 0.15273508,
"Reads": 0.06328341,
"WriteResponseTime": 0.0,
"ResponseTime": 0.15273508,
"SyscallCount": 0.09326678,
"HostMBWrites": 0.0,
"HostIOs": 0.06328341,
"MBs": 0.00024720083
},
{
"HostMBReads": 0.0004939684,
"timestamp": 1553637600000,
"Writes": 0.0,
"ReadResponseTime": 0.15828949,
"Reads": 0.1264559,
"WriteResponseTime": 0.0,
"ResponseTime": 0.15828949,
"SyscallCount": 0.123128116,
"HostMBWrites": 0.0,
"HostIOs": 0.1264559,
"MBs": 0.0004939684
},
{
"HostMBReads": 0.0,
"timestamp": 1553637900000,
"Writes": 0.0,
"ReadResponseTime": 0.0,
"Reads": 0.0,
"WriteResponseTime": 0.0,
"ResponseTime": 0.0,
"SyscallCount": 0.2,
"HostMBWrites": 0.0,
"HostIOs": 0.0,
"MBs": 0.0
}
],
"reporting_level": "Host"
}
"""
这是我如何格式化数据:
import json
data = json.loads(s)
symmetrixID= data['symmetrixID']
HostID= data['HostID']
for row in data['perf_data']:
HostMBReads = row['HostMBReads']
timestamp = row['timestamp']
joined = ",".join([str(c) for c in [symmetrixID, HostID, HostMBReads, timestamp]])
print(joined)
注意我改变了你的joined表情。如果您不先将所有这些浮点值更改为字符串,join则将不起作用。无论如何,您可以用print您需要的写入命令替换该命令。
添加回答
举报
