最近博主在分析数据库慢查询日志的时候想使用python把重复或者相似的sql去掉,这样就不用看很多类似的sql了。重复相同的数据去掉比较简单,可以使用内置的set命令完成。
例如:
l1 = ['a','b','c','d','e','a','b','f']
l2 = list(set(l1))
print l2
这个用python很容易实现。
如何去除相似的字符串,即我这边用到的sql语句?好在python方便,有内置库difflib可以使用。difflib计算相似度的方法类似如下:
>>> import difflib
>>> difflib.SequenceMatcher(None, 'abcde', 'abcde').ratio()
1.0
>>> difflib.SequenceMatcher(None, 'abcde', 'zbcde').ratio()
0.80000000000000004
>>> difflib.SequenceMatcher(None, 'abcde', 'zyzzy').ratio()
0.0
有了这个方法,让博主我就先理下思路。
先从list的第一个元素开始,遍历该元素后的每个元素并比较。如果判断两个字符串相似,那么就把该元素删除。遍历完后就从第二个元素开始,依次循环,最终得到的就是去除相似元素后的列表了。
暂时博主想到就是这个办法,如果有效率更高更好的欢迎交流。代码类似如下:
def remove_similar(lists,similarity=0.9):
i=0
l=len(lists)
while i
j=i+1
while j
seq=difflib.SequenceMatcher(None,lists[i],lists[j])
ratio=seq.ratio()
if ratio>=similarity:
del lists[j]
l=l-1
else:
j+=1
i+=1
return lists
上面函数默认相似度设置的是0.9,可以按照你的要求修改。
试用后效果好像不错,原来几百条的sql就只剩几条了。。。
参考链接:
https://docs.python.org/2/library/difflib.html