原文地址: https://www.ikaze.cn/article/65
新需求需要通过ip展示不同语言,由于ip很多,因此字典并不适用,下面给出几个方法。
1. 通过ip位置数据库
比较有名的服务商有:ipip(付费), maxmind (付费),纯真 (免费)。
但在这个应用场景下,我们并不需要具体的位置信息,类似的方案会浪费不必要的内存因此放弃。
2. 利用ip的连续性
后面两个方法有个前提:ip地址列表中大部分是连续的。
这里我们已有了国内ip地址列表(已有开源的库,很好找,另外我用的这个库已经把ip合并为了CIDR格式的地址)。
我们先通过二进制把ip转为可直接比较的数字,再把连续的ip变为 (start_ip, end_ip)
这样的集合,就可以利用二分法快速查找了。
import ipcalc
class ChinaIp:
def __init__(self):
self.data