Форум сайта python.su
0
Есть скрипт который подключается по ssh к комутатору и запрашивает таблицу мак адресов.
Выводит следующее
ES-2108-G# 7show mac address-table all
777777777777777777777777777Port VLAN ID MAC Address Type
5 1 e8:03:9a:18:be:91 Dynamic
ES-2108-G# 7
Офлайн
0
Смог реализовать через регулярки, но слишком топорно все получилось, как можно более лаконично и красиво сделать?
import re output = ''' ES-2108-G# 7show mac address-table all 777777777777777777777777777Port VLAN ID MAC Address Type 5 1 e8:03:9a:18:be:91 Dynamic 2 1 e8:01:9a:18:be:b1 Dynamic 3 1 e8:06:9a:18:be:g1 Dynamic 7 1 e8:07:9a:18:be:a1 Dynamic ES-2108-G# 7 ''' ids = [] macs = [] pattern = re.compile( r'(([0-9A-Fa-f]{2}[-:]){5}[0-9A-Fa-f]{2})|(([0-9A-Fa-f]{4}\.))') result = pattern.findall(output) for r in result: for x in r: if len(x) > 5: macs.append(x) for m in macs: print m pattern2 = re.compile("(\n\d)") result2 = pattern2.findall(output) for r in result2: ids.append(r) for i in ids: print i
Отредактировано fehu (Ноя. 29, 2015 17:10:20)
Офлайн
857
>>> text = """\ ... Port VLAN ID MAC Address Type ... 5 1 e8:03:9a:18:be:91 Dynamic ... 2 1 e8:01:9a:18:be:b1 Dynamic ... 3 1 e8:06:9a:18:be:g1 Dynamic ... 7 1 e8:07:9a:18:be:a1 Dynamic ... """ >>> >>> it = iter(text.splitlines()) >>> next(it) 'Port VLAN ID MAC Address Type ' >>> lst = list(map(str.split, it)) >>> lst [['5', '1', 'e8:03:9a:18:be:91', 'Dynamic'], ['2', '1', 'e8:01:9a:18:be:b1', 'Dynamic'], ['3', '1', 'e8:06:9a:18:be:g1', 'Dynamic'], ['7', '1', 'e8:07:9a:18:be:a1', 'Dynamic']] >>>
Офлайн