[英]Sort IP addresses with tuple python
我正在尝试纠正一些代码,这些代码将从Cisco IOS设备(重定向的VIA tftp)获取show命令的输出,并根据IP地址对其进行排序。 最终,我将采用CAM(mac地址表)并将其附加到它。
设备的输出如下所示:
Internet 172.17.150.198 77 000e.b6a9.e36d ARPA Vlan731/n
Internet 161.16.150.202 77 a0ec.f996.94d0 ARPA Vlan777/n
Internet 161.16.152.199 2 0016.3e7c.8a25 ARPA Vlan152/n
Internet 172.17.150.197 77 000e.b687.ee67 ARPA Vlan731/n
Internet 161.16.150.201 77 0cf5.a4e4.d37b ARPA Vlan777/n
Internet 161.16.154.196 0 0050.56b3.0ac9 ARPA Vlan154/n
Internet 161.16.152.198 1 0050.56b3.179d ARPA Vlan152/n
码:
# Format and parse show interface status
for line in fhand:
line = line.rstrip()
if not line.startswith('Internet'):
continue
b = line.split(); c = (b[-3] + b[-1]); b = b[1]
ips.append(b)
# Sort IP
for i in range(len(ips)):
ips[i] = "%3s.%3s.%3s.%3s" % tuple(ips[i].split("."))
ips.sort()
for i in range(len(ips)):
ips[i] = ips[i].replace(" ", "")
for ip in ips:
print ip (would also like 'c')
这基本上是按IP地址对所有内容进行排序(而不是对IP地址不起作用的默认排序)。 我真正想做的是拆分,并对ips列1,-3和-1进行切片,并显示该对和一行。 IE浏览器:
161.16.150.201 0cf5.a4e4.d37b Vlan777/n
161.16.150.202 a0ec.f996.94d0 Vlan777/n
161.16.152.199 0016.3e7c.8a25 Vlan152/n
161.16.154.196 0050.56b3.0ac9 Vlan154/n
172.17.150.197 000e.b687.ee67 Vlan731/n
我将如何去做呢?
如果这是您的来源,请致电fhand
:
source = '''
Internet 172.17.150.198 77 000e.b6a9.e36d ARPA Vlan731/n
Internet 161.16.150.202 77 a0ec.f996.94d0 ARPA Vlan777/n
Internet 161.16.152.199 2 0016.3e7c.8a25 ARPA Vlan152/n
Internet 172.17.150.197 77 000e.b687.ee67 ARPA Vlan731/n
Internet 161.16.150.201 77 0cf5.a4e4.d37b ARPA Vlan777/n
Internet 161.16.154.196 0 0050.56b3.0ac9 ARPA Vlan154/n
Internet 161.16.152.198 1 0050.56b3.179d ARPA Vlan152/n'''
fhand = source.splitlines()
然后,此代码将按IP地址排序并每隔一列打印一次:
def ip_sort(key):
"""
Assumes IP address is first element
Splits the IP address and orders result numerically.
"""
return [int(x) for x in key[0].split('.')]
keep = (line for line in fhand if line.startswith('Internet'))
keep = (tuple(line.split()[1::2]) for line in keep)
keep = sorted(keep, key=ip_sort)
for info in keep:
print '%-15s %s %s' % info
这是输出:
161.16.150.201 0cf5.a4e4.d37b Vlan777/n
161.16.150.202 a0ec.f996.94d0 Vlan777/n
161.16.152.198 0050.56b3.179d Vlan152/n
161.16.152.199 0016.3e7c.8a25 Vlan152/n
161.16.154.196 0050.56b3.0ac9 Vlan154/n
172.17.150.197 000e.b687.ee67 Vlan731/n
172.17.150.198 000e.b6a9.e36d Vlan731/n
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.