我有一个包含电话号码范围及其所有者(移动运营商名称)列表的文件http://www.rossvyaz.ru/opendata/7710549038-Rosnumbase/Kody_DEF-9kh.csv:
900;1940000;1949999;10000;Sky-1800
916;0;9999999;10000000;Mobile TeleSystems
917;0;29999;30000;Mobile TeleSystems
我每周都会有新的电话号码(格式为+79161234567)。所以,我应该检测他们的操作员。所以,我计划每周下载更新后的列表,然后将我的手机与此列表进行匹配。 主要问题是如何有效地做到这一点。一旦我下载了文件,最好的方法是什么保持在内存中,然后搜索移动运营商?你知道吗
第一个想法是逐行读取文件,对其进行解析,比较DEF(if '916' == def_from_the_line
),如果是这样,则比较范围(if 1234567>=range_start_from_the_line and 1234566<=range_end_from_the_line
),但效果不是很好(考虑到我需要查找几个电话号码)。你知道吗
以下是您可以使用的数据结构:
所以现在
operators
是一个字典,它的键是前缀(900916917),它的值是三元组的列表:范围的开始、范围的结束和操作符的名称。现在可以将数据保存到磁盘,以避免反复解析文件。你知道吗当您得到一个新的数字时,只需重新加载
operators
对象并将其保留在内存中。你知道吗然后,下面的函数将解析新的数字并找出它适合的范围:
以上打印
Mobile TeleSystems
相关问题 更多 >
编程相关推荐