Mar*_*hmi 2 python algorithm performance search logfile
有一个csv文件,包括基于该分类的电话号码的前缀列表.这是prefixes.csv的一个例子.这个文件接近2000行.
3511891,PORTUGAL-MOBILE (VODAFONE)
3511693,PORTUGAL-MOBILE (OPTIMUS)
3511691,PORTUGAL-MOBILE (VODAFONE)
34,SPAIN-FIXED
3469400,SPAIN-MOBILE (MVNO)
3469310,SPAIN-MOBILE (MVNO)
3469279,SPAIN-MOBILE (MVNO)
3469278,SPAIN-MOBILE (MVNO)
3469277,SPAIN-MOBILE (MVNO)
3469276,SPAIN-MOBILE (MVNO)
34673,SPAIN-MOBILE (VODAFONE)
243820000006,CONGO DEMOCARTIC REPUBLIC-SPECIAL SERVICES
243820000005,CONGO DEMOCARTIC REPUBLIC-SPECIAL SERVICES
243820000004,CONGO DEMOCARTIC REPUBLIC-SPECIAL SERVICES
88213200361,EMSAT-SPECIAL SERVICES
67518497899,PAPUA NEW GUINEA-SPECIAL SERVICES
56751975883,CHILE-SPECIAL SERVICES
56751975334,CHILE-SPECIAL SERVICES
56731974707,CHILE-SPECIAL SERVICES
Run Code Online (Sandbox Code Playgroud)
另一方面,有一个巨大的日志文件,包括数千行.这是日志的格式:
2015-11-01T00:00:17.735616+00:00 x1ee energysrvpol[15690]: INFO consume_processor: user:<<"dbdiayhg">> callee_num:<<"34673809195">> sid:<<"A1003unjhjhvhgfgvhbghgujhj02">> credits:-0.5000000000000001 result:ok provider:ooioutisrt.ym.ms
Run Code Online (Sandbox Code Playgroud)
所以,我必须在之后提取电话号码callee_num,然后将其与所有前缀逐位进行比较,以便发现相关号码的国家代码是什么callee_num.在此示例中,电话号码是34673809195,因此提取此号码,转到prefixes.csv并逐行检查它是否合适.
1)first time '3' from 34673xxxx
2)then 4
3) then 6
4) then 7
....
Run Code Online (Sandbox Code Playgroud)
并且必须为prefixes.csv的每一行重复所有这个过程,最后在这一行中34673,SPAIN-MOBILE (VODAFONE),数字是匹配的.想象一下,数,而不是34673IS 34670,并检查所有行后,没有任何匹配这个数字,所以应该可以保持的最后一个比赛prefixes.csv这是34和返回SPAIN-FIX.
我想知道在最短的时间内完成这些过程的最佳算法是什么.如果我之前需要订购前缀或者我只使用字典?我如何管理所有内容以获得高效的代码?如何处理搜索算法?如果递归函数是好主意?或者如果python中有一些库实现良好,请推荐它.
感谢您提供任何解决方案.