我不認爲你應該在第一時間做這個。不像你的玩具的例子,你的真正的問題不涉及一些笨拙的格式的字符串;它涉及Scapy NetworkInterface
對象。哪些屬性可以直接訪問。你只需要解析它,因爲你存儲了它的字符串表示。只是不要那樣做;存儲您實際需要的屬性時,您將它們作爲屬性。
的NetworkInterface
對象不是文檔中描述的(因爲它是Windows的特定代碼的實現細節),但你可以交互地檢查它像Python中的任何其他類別(例如,dir(ni)
會顯示所有屬性),或者只是看看the source。你想要的值是name
和win_name
。所以,而不是print ni
,只是做一些像print '%s,%s' % (ni.name, ni.win_name)
。然後,解析一些其他程序中的結果將是微不足道的,而不是脖子上的痛苦。或者,更好的是,如果你真的在Scapy本身使用它,只需直接從{ni.win_name: ni.name for ni in nis}
中製作字典即可。 (或者,如果你正在運行Scapy的對Python的2.5或東西,dict((ni.win_name, ni.name) for ni in nis)
。)
但是當你問它來回答這個問題(也許你已經捕獲的所有數據,並已經太晚了捕捉新數據,所以現在我們被困在你以前的錯誤中......),這裏有三個步驟:(1)找出如何將其中一個字符串解析爲其組成部分。 (2)在循環中構建一個將數字映射到名稱的字典。 (3)只需使用字典進行查找。
對於解析,我會使用正則表達式。例如:
<name:\S+\s(\S+).*?\{(\d+)\}>
Debuggex Demo
現在,讓我們構建的字典:
r = re.compile(r'<name:\S+\s(\S+).*?\{(\d+)\}>')
matches = (r.match(thing) for thing in things)
d = {match.group(2): match.group(1) for match in matches}
現在:
>>> d['20092973']
'student'
你從哪裏得到這個列表?格式大概是在某個地方定義的;如果可以的話,最好使用它,而不是猜測它。 – abarnert
我在scapy中得到這個列表。我讓函數修改scapy。 – Somputer
origin list is [''] –
Somputer