簡體   English   中英

如何獲取 python 字典中第一行和下一行的鍵

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM