2017-05-18 66 views
0

我得到下面的輸出變量「NODE_INFO」Python字典爲輸出指令處理

Node: node1 
Port: a0a-180 
Link: up 
MTU: 9000 
1 entries found 

我要檢查端口,鏈路狀態和MTU

我用下面的方法:

def mkdict(din): 
    global d 
    d = {} 
    for line in din.split("\n"): 
     if ":" not in line: 
       continue 
     key, value = line.strip().split(":", 1) 
     d[key] = value 
mkdict(node_info) 
Port = "a0a-180" 
Link = "up" 
MTU = "9000" 

for k, v in d.iteritems(): 
    if k == "Port": 
     v = v.strip() 
     if v.lower() == Port.lower(): 
      print "Port is {}".format(v) 
     else: 
      print "Failed:Port is {}".format(v) 

for k, v in d.iteritems(): 
    if k == "Link": 
     v = v.strip() 
     if v.lower() == Link.lower(): 
      print "Link is {}".format(v) 
     else: 
      print "Failed:Link is {}".format(v) 
for k, v in d.iteritems(): 
    if k == "MTU": 
     v = v.strip() 
     if v.lower() == MTU.lower(): 
      print "MTU is {}".format(v) 
     else: 
      print "Failed:MTU is {}".format(v) 

現在我得到下面的輸出變量 「NODE_INFO」

Node: node1 
Port: a0a-180 
Link: up 
MTU: 9000 

Node: node2 
Port: a0a-180 
Link: up 
MTU: 9000 

Node: node3 
Port: a0a-180 
Link: up 
MTU: 9000 

Node: node4 
Port: a0a-180 
Link: up  
MTU: 9000 
4 entries found. 

由於鍵是可重複的,節點鍵也在重複。如何檢查我所有4個節點(node1到node4)的輸出。我可能會得到超過64個節點的輸出。

注意:節點的實際輸出如下,但我只想檢查端口,MTU,Linux,因此我在輸出中提供了以上信息。

Node: node1 
Port: a0a-180 
Link: up 
MTU: 9000 
status: online 
Mac: 00:0a:0c:0a:00:01 
Mode: RW 
Type: 10G 

感謝,

回答

0

你爲什麼不使用這樣的結構?

{key=node_name, value={port:port_val,link:link_val,mtu:mtu_val,status:status_val}} 

順便說一句,你怎麼這個關鍵節點也重複是什麼意思?你的意思是說,node_name(例如:node1)可能會在輸入文件中出現多次?如果是這樣,我認爲這取決於你的要求,因爲我認爲,對於單個節點,所有的端口值,MTU值等應該只有一個值,所以如果你有兩個節點名爲node1,什麼是這個節點的準確值?

代碼:

data = dict() 

with open("source.txt", 'r') as fr: 
    while(True): 
     line = fr.readline() 
     if not line: 
      break 
     else: 
      tmp_array = line.strip().split(":") 
      if len(tmp_array) != 2: 
       continue 
      else: 
       key = tmp_array[0] 
       value = tmp_array[1] 
      if key == "Node": 
       node_name = value 
       if value not in data: 
        data[value] = dict() 
      else: 
       if node_name: 
        data[node_name][key] = value 

res_num = 0 
Port = "a0a-180" 
Link = "up" 
MTU = "9000" 

for key, value in data.iteritems(): 
    flag = True 
    for k, v in value.iteritems(): 
     if k == "Port": 
      if v.strip() != Port: 
       print "Failed:{} Port is {}".format(key, v) 
       flag = False 
     if k == "Link": 
      if v.strip() != Link: 
       print "Failed:{} Link is {}".format(key, v) 
       flag = False 
     if k == "MTU": 
      if v.strip() != MTU: 
       print "Failed:{} MTU is {}".format(key, v) 
       flag = False 
    if flag: 
     res_num += 1 

print "{} entries found".format(res_num) 

這裏是樣本輸入文件:

Node: node1 
Port: a0a-180 
Link: up 
MTU: 9000 

Node: node2 
Port: a0a-180 
Link: down 
MTU: 9000 

Node: node3 
Port: a0a-180 
Link: up 
MTU: 9000 

Node: node4 
Port: a0a-180 
Link: up 
MTU: 9000 

,輸出是這樣的:

Failed: node2 Link is down 
3 entries found 
+0

NODE_NAME關鍵是名稱和值是不同的例如:節點:node1,node:node2,這裏的關鍵是一樣的,值在變化 – pioltking

+0

那麼,爲什麼你不直接使用node_name作爲關鍵字,並把所有的ot她在字典中的價值是什麼? – chrischeng021

+0

是的,你是真的,但我正在尋找這種方法的例子,我沒有得到。你可以請我舉個例子怎麼做 – pioltking