import re import bisect from datetime import datetime db = [] def search_by_date(hour, minute=None, second=None, data=None): low = [hour] high = [hour] if minute is not None: low.append(minute) high.append(minute) if second is not None: low.append(second) high.append(second + 1) else: high.append(60) else: high.append(60) left = bisect.bisect_left(db, tuple(low)) right = bisect.bisect_left(db, tuple(high)) return [t[4] for t in db[left:right] if data in t[3]] def open_log(path): try: f = open(path) except FileNotFoundError: print('Файл с логом не обнаружен') return except PermissionError: print('Файл с логом не доступен для чтения') return return f # Возвращает значение успешности инициализации базы данных def init(path) -> bool: f = open_log(path) if f is None: return False matcher = re.compile(r'\[(?P.*?)\]\[(?P.*?)\]\[(?P.*?)\]\[(?P.*?)\] (?P.*)') lines = f.readlines() f.close() for line in lines: line = line.strip() match = re.match(matcher, line) if match: try: date = datetime.strptime(match.group('date'), '%c') except ValueError: print(f'Ошибка при разборе строки (Неверный формат даты):\n{line}') continue module = match.group('module') db.append((date.hour, date.minute, date.second, module, line)) else: print(f'Ошибка при разборе строки:\n{line}') db.sort() return True