0

没有你的帮助,我无法让它工作。我想根据设备名称过滤一些系统日志消息。输出应如下所示。

Device1: 1x failure1,50 x failure2, 20x failure3
Device3: 10 x failure1,5 x failure2, 2x failure3

代码:

frequencies = defaultdict(list)

word = ['syslog1error1','syslog1error2','syslog1error3']

def findpattern():
    for line in syslog:
            if re.search(r"regexforhostname",line):
                hostname= line.strip()[16:27]
                for failure in word:
                    if failure in line:     
                    frequencies[hostname].append(failure)

x = findpattern()

print frequencies

输出看起来像

'Devicename':'syslog1error1', 'syslog1error1', 'syslog1error2', 'syslog1error3'

我想计算列表中的双重条目。但我无法使用导入集合(计数器)运行它

请帮忙。

4

1 回答 1

2

使用collections.Counter()(如果您使用的 Python 版本 < 2.7,请参阅Collections 模块 Python 中的计数器):

from collections import Counter, defaultdict

def findpattern():
    frequencies = defaultdict(Counter)

    for line in syslog:
        if re.search(r"regexforhostname",line):
            hostname= line.strip()[16:27]
            frequencies[hostname].update(f for f in word if f in line)

    return frequencies

result = findpattern()
for device, frequencies in result.iteritems():
    print '{}: {}'.format(
        device, 
        ', '.join(['{}x {}'.format(c, f) for f, c in frequencies.most_common()]))
于 2013-07-29T10:24:19.663 回答