我正在用python编写脚本来解析ldap日志,然后获取每个用户的搜索/绑定数量。我在样本文件和小文件上测试我的代码,直到5-10MB的大小运行得很快,并在我的本地PC上在1分钟内完成。但是,当我在一个价值18M的文件上运行该脚本时,其大约有150000行,大约需要5分钟,我希望在100M的文件大小上运行此脚本,并且可能在每次运行时都有5-6个文件,这意味着脚本具有在每次运行中解析几乎600-700M的数据。但是我想这需要很长时间才能运行,所以如果我的下面的代码可以在执行时间方面获得更好的性能,那么我需要一些建议。需要很长时间才能运行的python脚本
import os,re,datetime
from collections import defaultdict
d=defaultdict(list)
k=defaultdict(list)
start_time=datetime.datetime.now()
fh = open("C:\\Rohit\\ECD Utilization Script - Copy\\logdir\\access","r").read()
pat=re.compile(' BIND REQ .*conn=([\d]*).*dn=(.*")')
srchStr='\n'.join(re.findall(r' SEARCH REQ .*',fh))
bindlist=re.findall(pat,fh)
for entry in bindlist:
d[entry[-1].split(",")[0]].append(entry[0])
for key in d:
for con in d[key]:
count = re.findall(con,srchStr)
k[key].append((con,len(count)))
#
for key in k:
print("Number of searches by ",key, " : ",sum([i[1] for i in k[key]]))
for key in d:
print("No of bind ",key," = ",len(d[key]))
end_time=datetime.datetime.now()
print("Total time taken - {}".format(end_time-start_time))
你可以请分享一些见解如何做到这一点,我很新,并没有使用itertools到现在。任何开始将是很大的帮助。 – Rohit
我该如何使用itertools来避免下面的循环 '对于key in d:for con in d [key]:count = re.findall(con,fh1)k [key] .append((con,len(count) ))' – Rohit
你可以在上面的评论中回答我的问题吗? – Rohit