제대로 압축 된 IPv6 주소를 신속하게 반환 할 수있는 코드를 작성하려고합니다. 나는 시도했다 ...빠른 파이썬 IPv6 압축
socket.inet_pton(socket.AF_INET6,socket.inet_PTON(socket.AF_INET6,address))
ipaddress.IPv6Address(address)
IPy.IP(address)
... IPv6 컴파일을 처리하는 속도가 더 빠르다. 첫 번째 IP 주소는 가장 빠르며 (IP 주소 65,565 개당 3.6 초), 두 번째 IP 주소는 IP 주소 65,565 개당 8.4 초 미만이며, 마지막 IP 주소는 두 번째 IP 주소보다 거의 두 배 빠릅니다 (~ 14.4 초 65,565 IP 주소 당). ,
2001:db8::cafe:1111
2001:db8::cafe:1111
2001:db8::a:1:2:3:4
2001:db8:0:a:1:2:3:4
2001:db8:aaaa::c
2001:db8:aaaa::c
2001:db8::1::4
2001:db8:0:1::4
2001:4958:5555::4b3:ffff
2001:4958:5555::4b3:ffff
는 각 항목의 첫 번째 줄은 내 코드입니다, 두 번째는 올바른 압축입니다 :
그래서, 나는 그것은 반환 ... 내 자신을 만들 수
import re
from ipaddress import IPv6Address
IPaddlist = [
'2001:db8:00:0:0:0:cafe:1111',
'2001:db8::a:1:2:3:4',
'2001:0DB8:AAAA:0000:0000:0000:0000:000C',
'2001:db8::1:0:0:0:4',
'2001:4958:5555::4b3:ffff',
]
for addr in IPaddlist:
address = ":".join('' if i=='0000' else i.lstrip('0') for i in addr.split(':'))
address2 = (re.sub(r'(:)\1+', r'\1\1', address).lower())
print(address2)
print(IPv6Address(addr))
print('\n')
을 설정 ipaddress.IPv6Address를 사용합니다.
당신이 볼 수 있듯이, 내가 가까이 해요,하지만 당신은 그들이 '가까운'에 대해 뭐라고하는지 알아요 ...
누구나 어떤 포인터가? 나는로드 블록을 쳤던 것 같다.
문제는 당신은 또한'사용할 수있는 ::'컴팩트하는 것입니다 귀하의 질문에 코드의 첫 번째 줄은 거의 10 배 빠른 당신의 문자열 조작보다 가장 긴 0의 순서. 간단한 정규식 *은이 문맥 정보를 처리 할 수 없습니다 ... 그러나 사실을 확인하려고 할 수 있습니다. 따라서'::'가 적어도 두 번 나타나는지 확인하고, 그렇다면 올바른 것을 발견하고 다른 것을': 0 :'으로 대체하십시오. – Bakuriu