【发布时间】:2013-09-08 15:01:18
【问题描述】:
我有大约 30 个文件,每个文件的大小约为 300MB。每个文件中都有一些我感兴趣的信息,例如用户名。现在我想使用正则表达式查找用户名,然后找到最常见的用户名。这是我的代码:
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(),但这不会有任何区别,不是吗?
那么,这是最佳做法吗?有什么方法可以提高性能吗?谢谢!
【问题讨论】:
-
瓶颈可能是从磁盘读取 9 GB。不过,您绝对应该预编译正则表达式。
-
尝试通过分析器运行它,它会让您了解需要优化的部分。
-
呵呵,你每天都能学到新东西。好提示!
标签: python performance algorithm sorting counter