使用Python删除IP地址中的前导零

时间:2017-06-30 18:21:46

标签: python python-2.7 python-3.x ip-address leading-zero

删除IP地址中不必要的零:

100.020.003.400  ->  100.20.3.400
001.200.000.004  ->  1.200.0.4
000.002.300.000  ->  0.2.300.0   (optional silly test)

我的尝试在所有情况下都不能很好地运作:

import re
ip = re.sub('[.]0+', '.', ip_with_zeroes)

对于其他语言也有类似的问题:

请为Python v2和v3提供解决方案。

6 个答案:

答案 0 :(得分:5)

ip = "100.020.003.400"
print '.'.join(str(int(part)) for part in ip.split('.'))
# 100.20.3.400

答案 1 :(得分:5)

使用netaddr library,然后它有ZEROFILL标志:

import netaddr

ip = "055.023.156.008"

no_zero_ip = netaddr.IPAddress(ip, flags=netaddr.ZEROFILL).ipv4()

# IPAddress('55.23.156.8')

如果您不想no_zero_ip类型

,您可能希望将IPAddress结果更改为字符串或其他内容

答案 2 :(得分:2)

对于2.6之前的版本,您可以使用string-modulo运算符。但是我们不要谈论这个问题。

这应该在引入format method之后做到(2.6):

'.'.join('{0}'.format(int(i)) for i in ip.split('.'))

可选择消除python≥3.3或≥2.7的索引(我认为):

'.'.join('{}'.format(int(i)) for i in ip.split('.'))

对于python≥3.6,我们得到f-string起来:

'.'.join(f'{int(i)}' for i in ip.split('.'))

如果你可以使用最后一个,我强烈推荐它。这非常令人满意。

答案 3 :(得分:0)

使用捕获组匹配最后一个数字并复制它,以防止替换所有数字。

ip = re.sub(r'\b0+(\d)', r'\1', ip_with_zeroes)

答案 4 :(得分:0)

您可以按"分拆。"转换为整数然后转换为字符串,然后通过"。"

加入
ip = ".".join([str(int(i)) for i in ip.split(".")])

答案 5 :(得分:0)

在Python 3.3+上最简单的方法是使用内置的ipaddress模块

import ipaddress
print(str(ipaddress.ip_address("127.000.000.1")))

将打印

127.0.0.1

但是请注意,无效IP地址会出现ValueError异常。好的方面是,这也适用于IPv6地址。