From 15cea51079b5f1ca2c769ae2335d8081984489c9 Mon Sep 17 00:00:00 2001 From: Andrew Date: Sat, 13 Apr 2019 01:42:12 +0400 Subject: =?UTF-8?q?=D0=94=D0=B5=D0=BD=D1=8C=203,=20=D0=97=D0=B0=D0=B4?= =?UTF-8?q?=D0=B0=D1=87=D0=B0=204?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day3/task4/task4.py | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 day3/task4/task4.py diff --git a/day3/task4/task4.py b/day3/task4/task4.py new file mode 100644 index 0000000..e04acc7 --- /dev/null +++ b/day3/task4/task4.py @@ -0,0 +1,51 @@ +import re +from datetime import datetime + +f = open('otrs_error.log') + +matcher = re.compile(r'\[(?P.*?)\]\[(?P.*?)\]\[(?P.*?)\]\[(?P.*?)\] (?P.*)') + +match_date_low = datetime(2017, 8, 6, 10, 0) +match_date_high = datetime(2017, 8, 6, 19, 0) +count_module = 'Kernel::System::Ticket::TicketPermission' +counter = 0 + +errors_by_module = {} +errors_by_date = {} + +lines = f.readlines() +for line in lines: + line = line.strip() + match = re.match(matcher, line) + + if match: + date = datetime.strptime(match.group('date'), '%c') + module = match.group('module') + + if match_date_low <= date <= match_date_high and module == count_module: + counter += 1 + + errors_by_module[module] = errors_by_module.get(module, 0) + 1 + + err_date = datetime(date.year, date.month, date.day) + errors_by_date[err_date] = errors_by_date.get(err_date, []) + [{ + 'date': date, + 'type': match.group('type'), + 'module': module, + 'id': match.group('id'), + 'text': match.group('text') + }] + + else: + print(f'Ошибка при разборе строки:\n{line}') + +print(f'За период с {match_date_low} по {match_date_high} в модуле "{count_module}" произошло {counter} ошибок') + +for module, count in sorted(errors_by_module.items(), key=lambda p: p[1], reverse=True): + print(f'В модуле {module} за все время произошло {count} ошибок') + +for date, errors in errors_by_date.items(): + # Дополняем дни и месяцы до ширины 2 с помощью нулей слева + with open(f'{str(date.day).rjust(2, "0")}.{str(date.month).rjust(2, "0")}.{date.year}.txt', 'w') as f: + for error in errors: + f.write(f"[{date.ctime()}][{error['type']}][{error['module']}][{error['id']}] {error['text']}\n") -- cgit v1.2.3 From c20e7afef4c0d0bdc555578156c882d00b04f8db Mon Sep 17 00:00:00 2001 From: Andrew Date: Mon, 22 Apr 2019 21:56:32 +0400 Subject: =?UTF-8?q?=D0=98=D1=81=D0=BF=D1=80=D0=B0=D0=B2=D0=B8=D0=BB=20?= =?UTF-8?q?=D1=87=D0=B5=D1=82=D0=B2=D0=B5=D1=80=D1=82=D1=83=D1=8E=20=D0=B7?= =?UTF-8?q?=D0=B0=D0=B4=D0=B0=D1=87=D1=83=20=D1=82=D1=80=D0=B5=D1=82=D1=8C?= =?UTF-8?q?=D0=B5=D0=B3=D0=BE=20=D0=B4=D0=BD=D1=8F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- day3/task4/task4.py | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/day3/task4/task4.py b/day3/task4/task4.py index e04acc7..b02f1fa 100644 --- a/day3/task4/task4.py +++ b/day3/task4/task4.py @@ -19,7 +19,12 @@ for line in lines: match = re.match(matcher, line) if match: - date = datetime.strptime(match.group('date'), '%c') + try: + date = datetime.strptime(match.group('date'), '%c') + except ValueError: + print(f'Ошибка при разборе строки (Неверный формат даты):\n{line}') + continue + module = match.group('module') if match_date_low <= date <= match_date_high and module == count_module: -- cgit v1.2.3