2016-09-29 32 views
0

我正在編寫一個python腳本,以便對我們的思科ASA防火牆進行API調用,並將從防火牆返回的信息放入字典中。然後我需要解析這本詞典尋找一個特定的字符串。問題是,有1個關鍵,看起來是一個很大的價值。我已經插入了從防火牆接收的輸出示例。解析字典查找特定字符串

{u'response':[u'object組網絡 NG-ENC-傳入-FTP-外\ n網絡對象1.1.1.1 255.255.255.128 \ n 網絡對象主機2.2.2.2 \ N網絡對象主機3.3.3.3 \ n 網絡對象主機4.4.4.4 \ n網絡對象主機5.5.5.5]}

理想情況下,我想搜索這個輸出尋找一個特定的IP和如果該IP存在,則顯示同樣多的消息。我似乎無法找到一個很好的方法來解析一個非常長的值,尋找一個特定的文本字符串。

回答

2

如果你只是想知道一個特定的IP是否是在響應字符串,你可以使用in操作:

if '2.2.2.2' in resp_dict['response'][0]: 
    print('Found') 

或全身:

ip = '2.2.2.2' 
if ip in resp_dict['response'][0]: 
    print('{} found'.format(ip)) 
+2

resp_dict [ '響應'] [0] –

+0

@LaurensKoppenol事實上搜索。謝謝。 – DeepSpace

0

提取所有IP和那麼你可以在列表中搜索一個特定的IP地址或者循環遍歷它們。或者你可以直接在字符串中的@DeepSpace說

import re 

d = {u'response': [u'object-group network ng-enc-incoming-ftp-outside\n network-object 1.1.1.1 255.255.255.128\n network-object host 2.2.2.2\n network-object host 3.3.3.3\n network-object host 4.4.4.4\n network-object host 5.5.5.5']} 

ip = re.findall(r'(\d+\.\d+\.\d+\.\d+)', d['response'][0]) 

>>> [u'1.1.1.1', u'255.255.255.128', u'2.2.2.2', u'3.3.3.3', u'4.4.4.4', u'5.5.5.5'] 

'1.1.1.1' in ip 
>>> True 

'1.1.1.2' in ip 
>>> False