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
类型。ip = "100.020.003.400"
print '.'.join(str(int(part)) for part in ip.split('.'))
# 100.20.3.400
PySequence_Fast
,但没有找到任何明确说明它可以更快地处理列表的内容,但这可能是真的。 - Alter如果是 2.6 版本之前的 Python,您可以使用字符串模板操作符。但是我们不讨论这个。
如果使用了 format
方法(自 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('.'))
ip = re.sub(r'\b0+(\d)', r'\1', ip_with_zeroes)
ip = ".".join([str(int(i)) for i in ip.split(".")])
在Python 3.3+中最简单的方法是使用内置的ipaddress
模块
import ipaddress
print(str(ipaddress.ip_address("127.000.000.1")))
将打印
127.0.0.1
但请注意,如果IP地址无效,您将会收到一个ValueError
异常。好消息是,这也适用于IPv6地址。
ipaddress
,但是ipaddress
无法从"010.10.10.10"
中删除前导零。引发的ValueError: u'010.10.10.10' does not appear to be an IPv4 or IPv6 address
异常令人惊讶,因为"10.10.10.10"
是一个有效的IPv4地址。因此,模块ipaddress
不是一个好的选择 :-( 供您参考,ipaddress
也可以被Python 2.7使用,但输入字符串应该是u"10.10.10.10"
。干杯 - oHo