缩写IPv6地址

时间:2015-03-17 19:07:15

标签: python python-3.x

有一个包含IP地址的数组。我需要一个选定的IP地址来缩短。例如:

['fcef:b0e7:7d20:0000:0000:0000:3b95:0565']

缩写规则:如果从0开始的部分需要从部分进行del或者例如0000需要将其更改为0。 缩写之前的前一个例子:

['fcef:b0e7:7d20:0:0:0:3b95:565']

2 个答案:

答案 0 :(得分:1)

您可以在join中使用生成器表达式,如下所示:

>>> ':'.join('0' if i.count('0')==4 else i.lstrip('0') for i in s.split(':'))
'fcef:b0e7:7d20:0:0:0:3b95:565'

或@ J.F.塞巴斯蒂安在评论中提到,您可以使用i == '0000'代替count

>>> ':'.join('0' if i=='0000' else i.lstrip('0') for i in s.split(':'))
'fcef:b0e7:7d20:0:0:0:3b95:565'

答案 1 :(得分:1)

您应该使用标准库中的ipaddress模块:

>>> import ipaddress
>>> str(ipaddress.ip_address('fcef:b0e7:7d20:0000:0000:0000:3b95:0565'))
'fcef:b0e7:7d20::3b95:565'
>>> ip = ipaddress.ip_address('fcef:b0e7:7d20:0000:0000:0000:3b95:0565')
>>> ip.compressed
'fcef:b0e7:7d20::3b95:565'
>>> ip.exploded
'fcef:b0e7:7d20:0000:0000:0000:3b95:0565'

这缩短了实际规则下的ip。

要仅使用您引用的规则来缩短IP,您只需使用replace

>>> 'fcef:b0e7:7d20:0000:0000:0000:3b95:0565'.replace('0000', '0')
'fcef:b0e7:7d20:0:0:0:3b95:0565'