在有些时候,会面对海量的字符串匹配某个字符串的问题,使用不同的方法其所消耗的时间也是不同的。
我是在提取PE文件中的字符串时,也遇到了这个问题。因为要去计算PE文件里字符串的贡献值,需要反复的查找某个字符串的贡献值。开始没有注意这个运行时间的问题,试过很多方式。特此记录。
可能有局限,仅供参考记录。
① 使用的几种方式
1.直接反复的使用数据库的查找去计算。
m = "select * from inf where Str = '%s'"%chk
cur.execute(m)
sinf = cur.fetchall()
2.通过正则去匹配查找。
p = re.compile("\s%s,\s\-??\d\.\d+"%sec)
fout = p.findall(db)
3.采用字典的方式储存和查找。
self.dict_con = { }
for i in range(snum):
key = sinf[i]
value = sinf0[i]
② 测试使用时间
在用这三种方式读取同一个文件;
测试文件:Getstr
1.直接读取数据库