Python Dict大文件中的密钥搜索和计数器值

时间:2015-04-27 13:43:21

标签: python dictionary collections defaultdict

我正在寻找一种有效的方法来扫描特定字符串的巨大日志文件,并为找到的每个字符串执行计数器。我希望编写这个方法,以便将来可以轻松扩展,我已经研究过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

0 个答案:

没有答案