【发布时间】:2020-11-10 06:20:50
【问题描述】:
我已经获得了基于IP的地理位置数据库,格式如下:
1.0.0.0/24,2077456,2077456,,0,0,,-33.4940,143.2104,1000
1.0.1.0/24,1814991,1814991,,0,0,,34.7725,113.7266,50
1.0.2.0/23,1814991,1814991,,0,0,,34.7725,113.7266,50
1.0.4.0/22,2077456,2077456,,0,0,,-33.4940,143.2104,1000
1.0.8.0/21,1814991,1814991,,0,0,,34.7725,113.7266,50
...
223.255.254.0/24,1880252,1880251,,0,0,37,1.3267,103.8869,5
223.255.255.0/24,2077456,2077456,,0,0,,-33.4940,143.2104,1000
CSV 文件中总共包含超过 300 万行。每行的第一部分是 CIDR 格式的 IP 范围。
我需要一种有效的方法来在这些行中快速定位给定的 IP 地址。比如给定IP地址1.0.1.2,我想快速定位到第二行,这样我就可以得到它的坐标,也就是这行剩下的数据。我想知道是否有任何有效的方法可以做到这一点,而不是从头开始检查每一行。
难点在于,比如IP范围1.0.2.0/23包含了IP地址1.0.3.0,所以单纯的字符串匹配是不行的。
【问题讨论】:
-
ip总是在开头吗?
-
是的,其实是来自GeoLite2基于IP的地理定位数据库,每一行都是一样的格式。
标签: python ip-address cidr