【发布时间】:2016-11-10 15:42:44
【问题描述】:
我正在尝试遍历一些 JSON 数据以导出到 CSV,并且一切顺利,直到我获得需要获取某些字段值的部分数据,其中这些字段并不总是存在于“标签”下.
我收到以下错误:
for alarm in tag["alarmst"]:
KeyError: 'alarmst'
我相信从Built-in Exceptions 读到这意味着键/字段不存在。
我在Errors and Exceptions 中读到,我可以将这个逻辑放在 try 语句 中说,如果这个键不存在,不要给我错误并执行其他操作或继续"tag" 下的下一组记录,其中 "alarmst" 所在的位置,然后将其(以及指定的其他字段)转储到文件中。
我无法弄清楚如何告诉这个逻辑停止给我这个错误,并且如果只存在“alarmst”,则只对所有字段值使用csv_file.writerow() 函数。
由于我将在此 Python 进程运行之前处理一个文件和进程,因此我无法解析数据并减少另一个中的 for 循环for 循环。
我不确定if tag["alarmst"] in tag: 的问题是否是由于其他人中有太多 for 循环,或者我是否需要以某种方式使用 try 语句,或者我只是没有做其他事情正确,因为我是这种编码级别的 Python 新手,但到目前为止它似乎可以满足需求。
如果这有什么不同,我会在 Windows 10 操作系统上运行它,但我认为它没有。
起始代码:
import json
import csv
with open('C:\\folder\\dev\\TagAlarms.txt',"r") as file:
data = json.load(file)
with open('C:\\folder\\dev\\TagAlarms.csv',"w",newline='') as file:
csv_file = csv.writer(file)
for dev in data["devs"]:
for tag in dev["tags"]:
for alarm in tag["alarmst"]:
csv_file.writerow(alarm['dateStatus'],[alarm['dateStart'], alarm['status'], alarm['type']])
如果代码:
import json
import csv
with open('C:\\folder\\dev\\TagAlarms.txt',"r") as file:
data = json.load(file)
with open('C:\\folder\\dev\\TagAlarms.csv',"w",newline='') as file:
csv_file = csv.writer(file)
for dev in data["devs"]:
for tag in dev["tags"]:
for alarm in tag["alarmst"]:
if tag["alarmst"] in tag:
csv_file.writerow(alarm['dateStatus'],[alarm['dateStart'], alarm['status'], alarm['type']])
【问题讨论】:
-
你打错了:
alarmSt应该是alarmst?
标签: python python-3.x dictionary keyerror