我有一个文件f1,其中包含42000000个ip地址的列表。 我有另一个文件,f2,它包含一个ipranges及其相关所有者的字典,比如:
Regional Physicians Neuroscience,[('66.110.238.100', '66.110.238.100')]
Coast Institute of Technology,[('41.89.132.0', '41.89.132.255')]
House Of Flowers,[('69.15.170.220', '69.15.170.223'), ('108.178.223.20', '108.178.223.23')]
现在我想知道f1中每个ip最有效的方法是找到它的相关范围和所有者。例如:
^{pr2}$有人能在这方面帮我吗??在
我们假设ip范围不能重叠;因此,如果按基址升序排序,则可以使用
bisect.bisect_left
来索引数组。如果array[index].first_address <= search_address <= .last_address
找到匹配项,否则不存在匹配项。在或者,将其全部转储到数据库中,索引第一个\u地址和最后一个\u地址,让数据库担心如何高效地搜索。见the sqlite documentation。在
做一次非Python
如果可能拥有者的总数很小(少于255个),但范围的数量却很大(数百个),您可以将每个IP转换为它所表示的四字节整数,然后使用它索引成一个庞大的字节数组。在
找到的字节值是所有者编号,255表示无人。在
如果您首先测试所有者实际需要的最小-最大范围,则所需的阵列将最大为4 GB,并且要小得多。在
相关问题 更多 >
编程相关推荐