2016-02-15 2 views
0

Программа для обработки файлов журнала с текстом, как показано ниже. Пожалуйста, помогите понять, как распечатать список компонентов (после даты и времени), упорядочив их по важности сообщений в журналах (первое слово). Сортировка строк разделенными словами

Например, компонент A должен быть в списке перед компонентом B, если он имеет больше сообщений с самым важным уровнем.

ERROR - 2015 Dec 28 14:48:30 - unfulminating_deacon - 55 - airtightly unintelligently appropriable arlen 
    INFO - 2015 Dec 28 02:02:56 - mangiest_ima - 144 - overrealistically decadently unfierce edris 
    CRITICAL - 2015 Dec 27 20:04:02 - unanticipated_konnor - 44 - amusively sensationally turbanlike rico 
    INFO - 2015 Dec 28 08:12:06 - unfulminating_deacon - 123 - eruptively nonmodally sebacic shavonda 
    CRITICAL - 2015 Dec 28 08:04:27 - unanticipated_konnor - 1213 - unchastely priorly monophyletic cullen 
    ERROR - 2015 Dec 28 07:39:36 - furnacelike_marlene - 1414 - healthfully flinchingly unbombastic slyvia 
    DEBUG - 2015 Dec 27 16:44:47 - mangiest_ima - 144 - questingly substitutionally uncompensative jen 
    ERROR - 2015 Dec 26 17:49:26 - furnacelike_marlene - 1414 - healthfully flinchingly unbombastic slyvia 

EXPECTED OUTPUT: 
unanticipated_konnor 
furnacelike_marlene 
unfulminating_deacon 
mangiest_ima 

Я сделал некоторый код, который подсчитывает частоту сообщений для компонентов, но я не уверен, что это может помочь:

from collections import Counter 
file = open('C:\\Users\\User\\Downloads\\tasks\\logs\\1.txt', "r+") 
warnList = [] 
for line in file: 
    warnList.append(line.split(' - ')[2]) 
res1 = dict(Counter(warnList)) 
print "Frequency of messages for components: {} \n".format(res1) 
file.close() 

Каждое предложение будет высоко оценен,

Надежда за помощью или советом,

заранее спасибо,

С уважением

ответ

-1

Я не совсем уверен, что я понял ваш вопрос правильно, но если вы хотите отсортировать файл журнала по важности, попробуйте следующее:

from __future__ import print_function 

import re 
import operator 
import collections 
import pprint as pp 

importance = { 
    'CRITICAL': 0, 
    'ERROR': 100, 
    'INFO': 200, 
    'DEBUG': 300 
} 

with open('log.log', 'r') as f: 
    data = f.read().splitlines() 

parsed = collections.OrderedDict() 

for line in data: 
    cols = re.split(r'\s+\-\s+', line) 
    parsed[line] = importance[cols[0]] 

for k,v in sorted(parsed.items(), key=operator.itemgetter(1)): 
    print(k)  

Выход:

CRITICAL - 2015 Dec 27 20:04:02 - unanticipated_konnor - 44 - amusively sensationally turbanlike rico 
CRITICAL - 2015 Dec 28 08:04:27 - unanticipated_konnor - 1213 - unchastely priorly monophyletic cullen 
ERROR - 2015 Dec 28 14:48:30 - unfulminating_deacon - 55 - airtightly unintelligently appropriable arlen 
ERROR - 2015 Dec 28 07:39:36 - furnacelike_marlene - 1414 - healthfully flinchingly unbombastic slyvia 
ERROR - 2015 Dec 26 17:49:26 - furnacelike_marlene - 1414 - healthfully flinchingly unbombastic slyvia 
INFO - 2015 Dec 28 02:02:56 - mangiest_ima - 144 - overrealistically decadently unfierce edris 
INFO - 2015 Dec 28 08:12:06 - unfulminating_deacon - 123 - eruptively nonmodally sebacic shavonda 
DEBUG - 2015 Dec 27 16:44:47 - mangiest_ima - 144 - questingly substitutionally uncompensative jen 

Если это не то, что вы хотели, проясните, что вам нужно.

Если вам нужен только третий столбец:

from __future__ import print_function 

import re 
import operator 
import collections 
import pprint as pp 

importance = { 
    'CRITICAL': 0, 
    'ERROR': 100, 
    'INFO': 200, 
    'DEBUG': 300 
} 

with open('log.log', 'r') as f: 
    data = f.read().splitlines() 

parsed = collections.OrderedDict() 

for line in data: 
    cols = re.split(r'\s+\-\s+', line) 
    parsed[cols[2]] = importance[cols[0]] 

for k,v in sorted(parsed.items(), key=operator.itemgetter(1)): 
    print(k)  

Выход:

unanticipated_konnor 
furnacelike_marlene 
unfulminating_deacon 
mangiest_ima 
+0

Это именно то, что мне нужно. Большое спасибо за Вашу помощь! – Cerato

Смежные вопросы