2017-05-07 88 views
1

我正在编写连接到思科交换机或路由器的程序,然后检查'show int'的输出。然后,我将数据处理/解析到具有二十一个键/值对字典的点。所有值都是整数。它正在按照我想 到目前为止。检查字典中的非零值

我在接下来要做的事情上有些麻烦,我希望能得到一些想法和/或指导。

我想要做的是:

检查每个值。如果ALL值为零,则跳过该字典。 如果任何单个值非零(如果它不是 零,它将是一个正整数),那么我想将整个字典保存到文件中。

我的程序的每次迭代都会创建一个表示来自交换机或路由器端口的数据的字典。因为我想要整个字典(所有二十一个键/值对),如果即使单个值不为零,我也不确定是否添加所有值,然后检查总和是否> 0。 0是最好的选择。

我可能会检查数千个交换机端口。

在我看来,'最好'将开始检查值,一旦我打到一个非零值,然后我想保存整个字典并继续下一个(循环通过端口开关,例如),但我只是不知道如何完成。

我将不胜感激关于如何最好地完成这项任务的一些想法或例子。

哦,我不愿意用'最好'这个词。由于我将处理数千个端口,我不想要的是一个低效率的方法,这就是为什么我只是简单地将所有值加起来的原因。

我只是不知道该如何输入代码:“只要我看到一个非零值 值,保存整个字典并继续下一个”。

回答

2

下面是请求的直接翻译,从您已完成的部分开始工作,并将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) 

仅供参考,在任何()函数有一个早期输出并停止尽快寻找它找到一个非零值。在Python 3中,values()返回数据的视图,因此它不会复制所有信息。在Python 2中,使用viewvalues()可以达到相同的效果。综合起来,这会给你很好的表现。

+0

非常感谢! – MarkS

-1

如果所有非零键都具有相同的值,则可以执行dict.get(x),如果x不在字典中,它将不返回任何值。

否则:

for value in dict.values(): 
     if value != 0: 
     return true 
    return false 

您可能还需要做dict.get(0)首先在情况下,所有值都非零。