我试着循环一些JSON数据导出到CSV,一切都很顺利,直到我得到一部分数据,我需要获得某些字段值,这些字段并不总是存在于“标记”下。在
我得到的错误是:
for alarm in tag["alarmst"]:
KeyError: 'alarmst'
我相信从Built-in Exceptions读来,这意味着键/字段不存在。在
我在Errors and Exceptions中读到,我可以把这个逻辑放在一个try语句中来说明,如果这个键不存在,请不要给我错误并执行其他操作,或者移动到“tag”下的下一组记录,其中“alarmst”就在这里,并将它(以及其他指定的字段)转储到文件中。在
我很难理解如何让这个逻辑停止给我这个错误,并且在只有“alarmst”存在的情况下才对所有字段值使用csv_file.writerow()
函数。在
因为在这个Python进程运行之前,我将使用一个文件和进程将“devs”和“tags”转换为它们自己的CSV文件,所以我无法解析数据并减少其他for循环中的for循环。在
我不确定if tag["alarmst"] in tag:
的问题是因为其他人中有太多for循环,还是我需要以某种方式使用try语句,或者我只是没有正确地执行其他操作,因为我是Python的新手,目前为止它似乎能满足需要。在
如果有什么不同的话,我会在Windows10操作系统上运行这个,但我想不会
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']])
{cd1>抛出的错误是什么。它意味着从与键
"alarmst"
相关联的tag
中获取值,但是没有这样的键,所以它失败了。if tag["alarmst"] in tag
将抛出相同的错误,而且,如果低于for alarm in tag["alarmst"]:
,那么您甚至不会到达该点。你想要的是:但更好的是:
^{pr2}$
^{3}$get
类似于普通的方括号访问,但如果找不到键,则第二个参数是默认值。因此,如果"alarmst"
不在字典中,则基本上是:这只是一个空循环,根本不会运行。在
相关问题 更多 >
编程相关推荐