我想根据地址的第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 python,Sorting IP Addresses in a Python Script),但我无法弄清楚。
答案 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::')]