[英]How to fetch key in the first line and next to next line in python dictionary
需要一些幫助來縮小我的問題范圍。
這是問題所在,我有一個 csv 文件,我已將其轉換為字典。
csv 格式
switch1,10.222.197.8/29,255.255.255.248,ab14-host_mini,100,a05-02,aad
ab14-app2-1-aad.pps.ddc.net,10.222.197.10,255.255.255.248,ab14-host_mini,100,a05-02,aad
ab14-app2-3-aad.pps.ddc.net,10.222.197.11,255.255.255.248,ab14-host_mini,100,a05-02,aad
ab14-cbatch2-1-aad.pps.ddc.net,10.222.197.12,255.255.255.248,ab14-host_mini,100,a05-02,aad
switch2,10.222.197.24/29,255.255.255.248,ab14-host_mini,100,b05-02,aad
vl100--asw1-b05-02-aad.net.ddc.net,10.222.197.25,255.255.255.248,ab14-host_mini,100,b05-02,aad
ab14-app2-4-aad.pps.ddc.net,10.222.197.26,255.255.255.248,ab14-host_mini,100,b05-02,aad
ab14-app2-5-aad.pps.ddc.net,10.222.197.27,255.255.255.248,ab14-host_mini,100,b05-02,aad
switch3,10.222.197.0/29,255.255.255.248,ab14-host_mini,100,b09-02,aad
vl100--asw1-b09-02-aad.net.ddc.net,10.222.197.1,255.255.255.248,ab14-host_mini,100,b09-02,aad
ab14-app1-2-aad.pps.ddc.net,10.222.197.2,255.255.255.248,ab14-host_mini,100,b09-02,aad
ab14-app1-5-aad.pps.ddc.net,10.222.197.3,255.255.255.248,ab14-host_mini,100,b09-02,aad
ab14-cbatch1-1-aad.pps.ddc.net,10.222.197.4,255.255.255.248,ab14-host_mini,100,b09-02,aad
switch4,10.222.197.32/29,255.255.255.248,ab14-host_mini,100,b14-02,aad
vl100--asw1-b14-02-aad.net.ddc.net,10.222.197.33,255.255.255.248,ab14-host_mini,100,b14-02,aad
ab14-app2-2-aad.pps.ddc.net,10.222.197.34,255.255.255.248,ab14-host_mini,100,b14-02,aad
ab14-cbatch2-2-aad.pps.ddc.net,10.222.197.35,255.255.255.248,ab14-host_mini,100,b14-02,aad
switch5,10.222.197.40/29,255.255.255.248,ab14-host_mini,100,c12-02,aad
vl100--asw1-c12-02-aad.net.ddc.net,10.222.197.41,255.255.255.248,ab14-host_mini,100,c12-02,aad
ab14-app1-1-aad.pps.ddc.net,10.222.197.42,255.255.255.248,ab14-host_mini,100,c12-02,aad
ab14-dapp1-1-aad.pps.ddc.net,10.222.197.43,255.255.255.248,ab14-host_mini,100,c12-02,aad
vl112--asw1-a01-01-aad.net.ddc.net,10.222.250.241,255.255.255.248,aad-fdc,112,a01-01,aad
cs97-fdc2-20-aad.pps.ddc.net,10.222.250.242,255.255.255.248,aad-fdc,112,a01-01,aad
cs97-fdc2-22-aad.pps.ddc.net,10.222.250.243,255.255.255.248,aad-fdc,112,a01-01,aad
switch6,10.222.162.32/27,255.255.255.224,aad-fdc,101,a02-01,aad
vl101--asw1-a02-01-aad.net.ddc.net,10.222.162.33,255.255.255.224,aad-fdc,101,a02-01,aad
cs77-fdc2-9-aad.pps.ddc.net,10.222.162.62,255.255.255.224,aad-fdc,101,a02-01,aad
cs92-fdc2-2-aad.pps.ddc.net,10.222.162.34,255.255.255.224,aad-fdc,101,a02-01,aad
cs95-fdc2-2-aad.pps.ddc.net,10.222.162.35,255.255.255.224,aad-fdc,101,a02-01,aad
我已經使用以下邏輯將其轉換為不一致的。
with open("pam.csv") as f:
reader = csv.reader(f)
mydict = {rows[0]: rows[1] for rows in reader}
print(mydict)
現在我想通過提供 ip 地址來獲取交換機名稱之一,我已經編寫了獲取它的邏輯,但我正在獲取服務器名稱。
舉個例子:當我在下面的邏輯 10.222.197.4 中輸入時,我試圖找到開關名稱,但我得到的服務器名稱叫做 ab14-cbatch1-1-aad.pps.ddc.net。
如何獲取該服務器 IP 的交換機名稱,所以在我的情況下我應該獲取 switch3
src = "10.222.197.4"
for key, value in mydict.items():
if src in value:
# key = mydict[src]
print("found")
print(key)
輸出:發現
ab14-cbatch1-1-aad.pps.ddc.net
只需再添加一個條件來匹配開關名稱模式:
src = "10.222.197.4"
for key, value in mydict.items():
if src in value and "switch" in key:
# key = mydict[src]
print("found")
print(key)
與@Zircoz 的基本思想相同,但另一種方法是首先創建一個針對您的搜索案例優化的數據結構:
import csv
from pprint import pprint
import re
switch_dict = {}
ip_pattern = r"(\d{1,3}\.?){4}"
with open("pam.csv") as file:
reader = csv.reader(file)
for row in reader:
if "switch" in row[0]:
ip_address = re.match(ip_pattern, row[1])[0]
switch_dict[ip_address] = row[0]
pprint(switch_dict)
輸出:
{'10.222.162.32': 'switch6',
'10.222.197.0': 'switch3',
'10.222.197.24': 'switch2',
'10.222.197.32': 'switch4',
'10.222.197.40': 'switch5',
'10.222.197.8': 'switch1'}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.