Lambda Python函数匹配Cortex XDR版本时通配符使用报错求助
问题原因与解决方法
为什么会触发KeyError?
你用line['Cortex*']直接访问字典键,但CSV文件的列名里根本没有Cortex*这个键——CSV的列是具体的软件全名(比如Cortex XDR 7.8、Cortex XDR 8.0),字典的键必须和列名完全匹配。通配符*不能直接用在字典键的索引上,Python会把Cortex*当成一个精确的键名去查找,找不到自然就报KeyError了。你导入了re模块但没真正用正则来匹配键名。
解决方法
遍历CSV行的所有键,用正则匹配符合Cortex XDR开头(或包含该字符串)的列名,提取对应的值。
代码修改示例
把Windows实例处理部分的xdr=line['Cortex*']替换成以下逻辑:
# 匹配Cortex XDR相关的列(根据实际列名调整正则) xdr_value = "" # 正则模式:匹配以"Cortex XDR"开头的列名,适配带版本号的情况 cortex_pattern = re.compile(r'^Cortex XDR') for key in line.keys(): if cortex_pattern.match(key): xdr_value = line[key] break # 每个实例通常只有一个XDR版本,找到第一个匹配项就停止 item = dict(id=line['instance-id'], name=line['instance-name'], ip=line['ip-address'], ssm=line['Amazon SSM Agent'], cw=line['Amazon CloudWatch Agent'], ch=line['CloudHealth Agent'], mav=line['McAfee VirusScan Enterprise'], trx=line['Trellix Agent'], xdr=xdr_value)
正则调整说明
- 如果CSV列名是
Cortex XDR v1.2这种格式,用r'^Cortex XDR'就能匹配所有开头是该字符串的列。 - 如果列名里
Cortex不是开头(比如Palo Alto Cortex XDR 9.1),把正则改成re.compile(r'Cortex XDR')即可匹配包含该字符串的列。
这样修改后,不管实例安装的是哪个版本的Cortex XDR,都能正确提取到对应的版本值;如果实例没安装,xdr_value会是空字符串,会被not all(item.values())判定为不达标,符合你的统计需求。
内容的提问来源于stack exchange,提问作者TIM02144
相关产品推荐
相关产品推荐

