有一个包含IP地址的数组。我需要一个选定的IP地址来缩短。例如:
['fcef:b0e7:7d20:0000:0000:0000:3b95:0565']
缩写规则:如果从0开始的部分需要从部分进行del或者例如0000
需要将其更改为0
。
缩写之前的前一个例子:
['fcef:b0e7:7d20:0:0:0:3b95:565']
答案 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'