我正在寻找一种有效的方法来扫描特定字符串的巨大日志文件,并为找到的每个字符串执行计数器。我希望编写这个方法,以便将来可以轻松扩展,我已经研究过defaultdict(int),但我只是在查找字符串中所有字的例子。
为了让事情变得更加困难,我希望找到dict键:[List]方法,其中Key将成为搜索字符串和列表之一,因此我可以为每个键添加一些凭据,以便我可以稍后在脚本中引用它们,这样它就可以轻松扩展而无需在脚本周围做出更改。
像...一样的东西。
mycounterdict = {'Mondeo':['Total Fords', 0, 'Belgium'], 'Passat':['Total VWs',0, 'Germany'], 'A4':['Total Audis', 0, 'Germany']}
我用来读取日志的应用程序的结构是将完整的“数据组”传递给脚本(在本例中为“CARinfo”,尽管它们与其他“数据组”混合在一起)。
典型日志的可视示例(注意:虚线概述了每次'找到CARinfo'时传递给脚本的文本块。)
Group ID: CARinfo, for Year 20xx
Car model = Mondeo
Year Purchased, 2014
Group ID: FUELinfo, for Year 20xx
Type: Diesel
Group ID: CARinfo, for Year 20xx
Car model = Passat
Year Purchased, 2012
--------------------------------
Group ID: CARinfo, for Year 20xx
Car model = Passat
Year Purchased, 2011
--------------------------------
我的脚本将首先搜索大型数据日志以匹配“CARinfo”数据组,然后在数据组中的任何位置查找密钥匹配。如果我找到一个密钥匹配(例如蒙迪欧),那么我想增加dict值[1](列表条目[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
谢谢, MikG