在Python列表中的IP地址的最后一个八位位组上排序

斯密蒂

这有点令人困惑(至少对我而言)。我正在使用一个简单的Python脚本使用fping返回“启动”主机的列表。我将每个“ up”主机存储在Python列表中,但是list.sort()显然不会基于存储为字符串的IP地址的最后一个八位位组进行排序。我想对降序的.1,.2,.3等进行排序。

这是代码的一部分:

for addr in os.popen("fping -a -q -g " + subnet):
    addr = addr.rstrip('\n')
    addr_list.append(addr)

addr_list.sort()
for ip in addr_list:
    print ip
无液

假设您的addr_list列表如下所示(您尚未在问题中指定列表):

addr_list = [
    '10.11.12.13',
    '1.2.3.4',
    '127.0.0.1',
    '192.168.0.1',
]

在上进行分割,.并使用最后一项(最后一个八位位组)作为排序的键。当然,对于“ 127.0.0.1”和“ 192.168.0.1”,您可能想对第二倒数第二个字节进行排序,然后对第三倒数第八个字节进行排序,然后对第一个八比特组进行排序。

因此,将此行为用作key

>>> list(reversed('10.11.12.13'.split('.')))
['13', '12', '11', '10']
>>> sorted(addr_list, key=lambda ip: list(reversed(ip.split('.'))))
['127.0.0.1', '192.168.0.1', '10.11.12.13', '1.2.3.4']

请注意,13之前已列出4因此,还要确保将每个项目都比较为数字而不是字符串:

>>> sorted(addr_list, key=lambda ip: map(int, reversed(ip.split('.'))))
['127.0.0.1', '192.168.0.1', '1.2.3.4', '10.11.12.13']

将其分配给另一个列表或进行就地排序:

>>> addr_list.sort(key=lambda ip: map(int, reversed(ip.split('.'))))
>>> addr_list
['127.0.0.1', '192.168.0.1', '1.2.3.4', '10.11.12.13']

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

每八位加一个逗号

将DNP3时间的48位(6个八位位组)转换为python中的时间戳

Clojure基座根充当应用程序/八位位组流

将八位位组字符串转换为Unicode字符串,Python 3

通过python regex忽略IP地址的第一个八位字节中的这两个数字(以127或0开头)

如何替换熊猫中IP地址的最后一个八位位组

如何修复“八位位组序列#(130)无法解码”。在pgloader中

如何将IP地址的最后一个八位位组放入3个独立的int

如何绕过Windows 8.1中无线适配器mac地址的第一个八位位组限制

如何增加IP地址中的最后一个八位位组

正则表达式将从IPv4八位位组中减去前导零

修剪最后一个IP八位字节并反转

如何从给定范围的ip地址打印每个class-c,最后一个八位字节用星号替换

如何用数字2替换有效网络地址的最后一个八位位组

Python,如何在反向区域中删除第一个八位位组?弦乐

如何遍历awk中的最后一个IP八位位组?

使用seq和数学运算操作ip地址中的最后一个八位位组以创建文件

更改IP awk中的最后一个八位位组

通过更改IP的最后一个八位字节,使用vbscript更改默认网关

Chef-寻找一种更好的方法来查找IP地址的最后一个八位位组。

Notepad ++将IP地址中的最后一个八位位组(?)替换为0

获取IP地址并更改第三个八位位组

一个衬里提取IP地址,最后一个八位位组替换为0

需要使用Powershell将最后两个八位位组添加到IP范围列表中

在 IP 地址的最后一个八位字节上添加 2

从 R 中的 IP 十进制形式中删除最后一个八位字节

在字符串中定义 IP 地址并替换最后一个八位字节

我需要制作脚本来每周自动更改服务器上的 IP 地址,并将最后一个八位字节加一

如何使用 Bash 替换 IP 地址中的最后一个八位字节?