我有大约30个文件,每个文件的大小约为300MB我对每个文件都感兴趣,比如用户名。现在我想使用regex查找用户名,然后查找最常见的用户名这是我的代码:
rList=[]
for files in os.listdir("."):
with open(files,'r') as f:
for line in f:
m=re.search('PATTERN TO FIND USERNAME',line)
if m:
rList.append(m.group())
c=Counter(rList)
print c.most_common(10)
如您所见,我将找到的每个用户名添加到列表中,然后调用counter()。这样大约需要几分钟才能完成。我试过每次读完一个文件时都删除
c=Counter(rList)
并调用c.update()
,但这不会有任何不同,对吗?那么,这是最佳实践吗有什么方法可以提高性能吗?谢谢!
最佳答案
分析将向您显示,在文件的每一行上逐个循环会带来很大的开销如果文件总是在您指定的大小附近,并且您可以使用内存,那么只需调用一次.read()
就可以将它们放入内存中,然后使用更复杂的预编译regexp(考虑到换行)一次提取所有用户名然后使用来自匹配regexp的组的计数器对象这将是尽可能有效的。
关于python - 如何提高在Python中查找最常见字符串的性能?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18685162/