Обновление словаря python с помощью регулярных выражений - PullRequest
0 голосов
/ 04 февраля 2020

Я перебираю файл журнала и мне нужно обновить значения словаря с помощью соответствия регулярному выражению внутри группы. когда я пытаюсь использовать error_msg 1 «Я получаю IndexError: список индексов выходит за пределы диапазона».

Вот примеры строк из файла системного журнала, которым я соответствую =

Май 27 11:45:40 ubuntu.local ticky: ИНФОРМАЦИЯ: Создан тикет [# 1234] (имя пользователя)

24 мая 11:44:12 ubuntu.local ticky: ОШИБКА: время ожидания при получении информации [# 34504] (имя пользователя)

24 мая 11:44:12 ubuntu.local ticky: ОШИБКА: не удалось подключиться к базе данных [# 44514] (имя пользователя)

Есть еще один словарь, "per_user", это работает правильно и увеличивает счетчики «INFO» и «ERROR» для каждого пользователя.

error = {}
per_user = {}
with open('syslog.log', 'r') as file: #opening the syslog file
    for line in file.readlines():
        pattern1 = r"ticky: INFO: ([\w ]*) " #info message
        pattern2 = r"ticky: ERROR: ([\w ]*) " #error message
        pattern3 = r"(\([\w]*\))$" #username
        info_msg = re.findall(pattern1, line)
        error_msg = re.findall(pattern2, line)
        user = re.findall(pattern3, line)
        for x in user:
            x = x.strip('()')
            if x not in per_user:
                per_user[x] = {'INFO':0,'ERROR':0}
            if info_msg is not None:
                per_user[x]['INFO'] += 1
            if error_msg is not None:
                per_user[x]['ERROR'] += 1  
        if error_msg is not None:
            for errors in error_msg:
                if errors not in error:
                    error[errors] = 0
                error[errors] += 1

    file.close()

Почему мой словарь ошибок не добавляет ключи для error_msg 1 и увеличивает счетчик каждого сообщения?

Это примеры таблиц, для которых мои словари будут заполняться ссылка.

enter image description here

enter image description here

1 Ответ

0 голосов
/ 06 мая 2020

Один раз проверьте, есть ли ":" после ОШИБКИ и ИНФОРМАЦИИ в файле журнала

Надеюсь, это поможет:)

            if x not in per_user:
                per_user[x] = {'INFO':0,'ERROR':0}
            if info_msg != []:
                per_user[x]['INFO'] += 1
            if error_msg != []:
                per_user[x]['ERROR'] += 1  
        if error_msg != []:
            for errors in error_msg:
                if errors not in error:
                    error[errors] = 0
                error[errors] += 1
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...