如何根据文件中的特定列对IPv6地址进行排序?

时间:2018-07-12 10:08:42

标签: python python-3.x

我想根据地址的第n列对一组IPv6地址进行排序。

具体来说,它们存储在文件中。如果我有包含这些行的文件...

5128581|::|2001:4:ffff:ffff:ffff:ffff:ffff:ffff||1

2747125|2001:6::|2001:5:0:ffff:ffff:ffff:ffff:ffff||2

745044|2001:5:1::|2001:5:1:ffff:ffff:ffff:ffff:ffff||3

我想按第二列对它们进行排序,以获得以下输出:

5128581|::|2001:4:ffff:ffff:ffff:ffff:ffff:ffff||1

745044|2001:5:1::|2001:5:1:ffff:ffff:ffff:ffff:ffff||3

2747125|2001:6::|2001:5:0:ffff:ffff:ffff:ffff:ffff||2

我该怎么做?

我发现了一些有用的问题(Sort a file by first (or second, or else) column in pythonSorting IP Addresses in a Python Script),但我无法弄清楚。

1 个答案:

答案 0 :(得分:1)

要解析IPv6地址,可以使用ipaddress模块。要按第n列排序,可以在key函数中使用sorted()参数。这应该给您一个想法:

import ipaddress
from pprint import pprint

i = [('c1', 'b2', '2::'), 
     ('a1', 'c2', '1::'),
     ('b1', 'a2', '3::')]

out = sorted(i, key=lambda v: ipaddress.ip_address(v[2])) # sort by column 2 (0-indexed)
pprint(out, width=25)

输出:

[('a1', 'c2', '1::'),
 ('c1', 'b2', '2::'),
 ('b1', 'a2', '3::')]