других ответы с регулярным выражением и расщеплением линии будет получить работу, но если вы хотите полностью поддерживаемое решение, которое будет расти вместе с вами, вы должны построить грамматику. Я люблю pyparsing
для этого:
S ='''
7:06:32 (slbfd) IN: "lq_viz_server" [email protected]
7:08:21 (slbfd) UNSUPPORTED: "Slb_Internal_vlsodc" (PORT_AT_HOST_PLUS ) [email protected] (License server system does not support this feature. (-18,327))
7:08:21 (slbfd) OUT: "OFM32" [email protected]'''
from pyparsing import *
from collections import defaultdict
# Define the grammar
num = Word(nums)
marker = Literal(":").suppress()
timestamp = Group(num + marker + num + marker + num)
label = Literal("(slbfd)")
flag = Word(alphas)("flag") + marker
name = QuotedString(quoteChar='"')("name")
line = timestamp + label + flag + name + restOfLine
grammar = OneOrMore(Group(line))
# Now parsing is a piece of cake!
P = grammar.parseString(S)
counts = defaultdict(int)
for x in P:
if x.flag=="IN": counts[x.name] += 1
if x.flag=="OUT": counts[x.name] -= 1
for key in counts:
print key, counts[key]
Это дает в качестве вывода:
lq_viz_server 1
OFM32 -1
Какой будет выглядеть более внушительно, если ваш файл журнала образец был длиннее. Красота решения pyparsing - возможность адаптироваться к более сложному запросу в будущем (например, захватить и проанализировать временную метку, вывести адрес электронной почты, разобрать коды ошибок ...). Идея состоит в том, что вы пишете грамматику независимо от запроса - вы просто конвертируете исходный текст в удобный для компьютера формат, абстрагируя реализацию разбора от использования.
[что вы пробовали] (HTTP: // whathaveyoutried .com) до сих пор? где вы застряли? – Aprillion
Вы можете проанализировать строку с помощью команды .split(). У вас есть какой-либо код, пытающийся разобрать одну строку? После того, как вы сможете разобрать одну строку, вы сможете разобрать их все. После этого просто вопрос проверки правильных элементов в каждой строке с логикой –