我正在编写一个程序,该程序连接到Cisco交换机或路由器,然后检查“ show int”的输出。然后,我将数据处理/解析到拥有二十一个字典的地步
键/值对。所有值都是整数。它完全按照我的要求工作
到这一点。
我在想下一步要做什么时遇到了一些麻烦,希望能得到一些想法和/或指导。
我想做的是这样的:
检查每个值。如果所有值均为零,则跳过该词典。
如果ANY单个值非零(如果不是,则为正整数)
零),那么我想将整个字典保存到文件中。
我程序的每次迭代都会创建一个字典,该字典代表来自交换机或路由器端口的数据。
因为我想要整个字典(所有二十一个键/值对),即使单个值也不为零,所以我不确定是否要添加所有值,然后
检查总和是否大于0是最佳选择。
我可能正在检查数千个交换机端口。
在我看来,“最佳”将是开始检查值,当我击中非零值时,我想保存整个字典并继续进行下一个字典(例如,遍历交换机上的端口) ),但我不确定如何实现这一目标。
我将对如何最好地完成此任务的一些想法或示例表示赞赏。
哦,我很犹豫地使用“最佳”一词。由于我将处理数千个端口,因此我不希望使用效率低下的方法,这就是为什么
我很想简单地将所有值加起来。
我只是不确定如何输入代码:“一旦我看到一个非零的值
值,保存整个字典,然后继续进行下一个”。
最佳答案
这是请求的直接翻译,从您已经完成的部分开始工作,并将应用于字典any()的values函数合并。
# I am in the process of writing a program that connects to a Cisco switch or
# router and then examines the output of a 'show int '. I then process\parse the
# data to the point where I have a dictionary of twenty-one key\value pairs.
# All values are integers.
for device in devices:
s = run_show_interfaces(device)
d = preprocess_parse(s)
# Check each value. If ALL values are zero, then skip that dictionary. If ANY
# single value is non-zero (it will be a positive integer if it is not zero),
# then I want to save to a file the entire dictionary.
if any(d.values()):
filename = os.path.join(device, '.txt')
with open(filename, 'w') as f:
json.dump(d, f)
仅供参考,any()函数具有提前退出功能,一旦找到非零值,它将停止查找。在Python 3中,values()返回数据视图,因此它不会复制所有信息。在Python 2中,使用viewvalues()可以达到相同的效果。两者合计,将为您带来出色的性能。
关于python - 检查字典中的非零值,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/43826775/