我正在用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