繁体   English   中英

用元组python排序IP地址

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

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM