我正在寻找一种有效的方法来扫描一个巨大的日志文件中的特定字符串,并为每个找到的字符串做一个计数器。我希望编写这个方法,以便将来可以方便地扩展它,我已经研究过defaultdict(int),但我只找到一些例子来计算字符串中所有单词。在
为了让事情变得更困难,我希望使用dict Key:[List]方法,其中Key将是搜索字符串和列表中的一个,这样我就可以为每个键添加一些凭证,这样我就可以在以后的脚本中引用它们,这样它就可以很容易地扩展,而不必在脚本周围进行更改。在
像是。。。在
mycounterdict = {'Mondeo':['Total Fords', 0, 'Belgium'], 'Passat':['Total VWs',0, 'Germany'], 'A4':['Total Audis', 0, 'Germany']}
我用来读取日志的应用程序的结构是将完整的“数据组”传递给脚本(在本例中为“CARinfo”,尽管这些数据组与其他“数据组”混合在一起)。在
典型日志的可视化示例(注意:虚线勾勒出每次找到“CARinfo”时传递给脚本的文本块)。在
^{pr2}$
然后,我的脚本将首先搜索大型数据日志,以匹配“CARinfo”数据组,然后在数据组中的任何位置查找键匹配。如果我找到一个匹配的键(例如蒙迪欧),那么我想增加dict值[1](list entry[1])
我想做这样的事情,但我想知道我是否需要对这个方法进行一次彻底的重新思考,这个方法一开始很简单,但现在看起来太复杂了!在
path = C:\apath
for root, subFolders, files in os.walk(path):
for filename in files:
if filename.endswith('.log'):
filenameext = filename.split(".log")
f = root+'\\'+filename
print "\tCurrently working on file: "+filename
logtool.open_log(f)
mygroup = logtool.app.DataGroup
while (mygroup.Next()):
if 'CARinfo' in mygroup.Text:
for k, v in mycounterdict:
if k in mypkt.Text:
v[1]+=1
print mycounterdict