好吧,我正在尝试编写一个脚本,该脚本将运行生成的报告,并为我提供每种漏洞类型的行数。由于xml的格式化方式,我试图在遇到漏洞类型时使用变量来设置字典密钥,然后只增加该密钥的值,直到它到达该部分的末尾。
我认为我遇到了如何增加变量定义的键值的问题。这就是我到目前为止所做的。
#!/usr/bin/python
file = open('Test.xml','r')
vulns = {4:0, 3:0, 2:0, 1:0}
pos = 0
for line in file:
if line.find('Critical') != -1:
pos = 4
if line.find('High') != -1:
pos = 3
if line.find('Medium') != -1:
pos = 2
if line.find('/Chart1_CategoryGroup1_Collection') != -1:
pos = 1
if line.find('Chart1_CategoryGroup1 Label=') != -1:
vulns[pos] = vulns[pos] + 1
for i in vulns.values():
print i
当我尝试运行脚本时,它会重新启动
Traceback (most recent call last):
File "./vulnReport.py", line 23, in <module>
vulns[pos] = vulns[pos] + 1
KeyError: 0
答案 0 :(得分:2)
if line.find('Chart1_CategoryGroup1 Label=') != -1:
vulns[pos] = vulns[pos] + 1
在pos
更新为0
以外的值之前执行,并且您的dict不包含0
条目。
即,执行
vulns[0] = vulns[0] + 1
答案 1 :(得分:0)
您可能会发现以下版本更易于使用和维护:
#! /usr/bin/env python
import itertools
search = ('Critical',
'High',
'Medium',
'/Chart1_CategoryGroup1_Collection',
'Chart1_CategoryGroup1 Label=')
counts = dict.fromkeys(search, 0)
with open('Test.xml') as file:
for line, item in itertools.product(file, search):
counts[item] += item in line
for pair in sorted(counts.items()):
print('{!s}: {!r}'.format(*pair))