使用 Python 删除 IP 地址中的前导零
Remove leading zeros in IP address using Python
删除 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)
其他语言也有类似问题:
- Perl
- SQL
请为 Python v2 和 v3 提供解决方案。
对于 2.6 之前的版本,您可以使用字符串取模运算符。但是,我们不要谈论那个。
早在引入 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,我们将其串起来:
'.'.join(f'{int(i)}' for i in ip.split('.'))
如果你能用上一个,强烈推荐。这是相当令人满意的。
使用捕获组匹配最后一个数字并复制它,以防止所有数字被替换。
ip = re.sub(r'\b0+(\d)', r'', ip_with_zeroes)
ip = "100.020.003.400"
print '.'.join(str(int(part)) for part in ip.split('.'))
# 100.20.3.400
可以用“.”分割转换为整数,然后转换为字符串,并通过“.”连接。
ip = ".".join([str(int(i)) for i in ip.split(".")])
使用 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')
如果您不想要 IPAddress
类型
,您可能希望将 no_zero_ip
结果更改为字符串或其他内容
在 Python 3.3+ 上执行此操作的最简单方法是使用内置 ipaddress
模块
import ipaddress
print(str(ipaddress.ip_address("127.000.000.1")))
将打印
127.0.0.1
但请注意,如果 IP 地址无效,您将得到一个 ValueError
异常。好的部分是这也适用于 IPv6 地址。
删除 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)
其他语言也有类似问题:
- Perl
- SQL
请为 Python v2 和 v3 提供解决方案。
对于 2.6 之前的版本,您可以使用字符串取模运算符。但是,我们不要谈论那个。
早在引入 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,我们将其串起来:
'.'.join(f'{int(i)}' for i in ip.split('.'))
如果你能用上一个,强烈推荐。这是相当令人满意的。
使用捕获组匹配最后一个数字并复制它,以防止所有数字被替换。
ip = re.sub(r'\b0+(\d)', r'', ip_with_zeroes)
ip = "100.020.003.400"
print '.'.join(str(int(part)) for part in ip.split('.'))
# 100.20.3.400
可以用“.”分割转换为整数,然后转换为字符串,并通过“.”连接。
ip = ".".join([str(int(i)) for i in ip.split(".")])
使用 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')
如果您不想要 IPAddress
类型
no_zero_ip
结果更改为字符串或其他内容
在 Python 3.3+ 上执行此操作的最简单方法是使用内置 ipaddress
模块
import ipaddress
print(str(ipaddress.ip_address("127.000.000.1")))
将打印
127.0.0.1
但请注意,如果 IP 地址无效,您将得到一个 ValueError
异常。好的部分是这也适用于 IPv6 地址。