diff options
| author | Андрей Гущин <saintruler@gmail.com> | 2019-06-06 10:02:41 +0300 |
|---|---|---|
| committer | Андрей Гущин <saintruler@gmail.com> | 2019-06-06 10:02:41 +0300 |
| commit | 3cfb10729201b806b09a12de4eef6abb3b71aad5 (patch) | |
| tree | 06d5fd4b269d40dc0c5863e6c419cb95144db560 /day4/task3/db.py | |
| parent | 5191aa270d852da42ff8adbd630daeb7fb82fa23 (diff) | |
| parent | 4a3db50d7df0f636ef824637d33330543e9044b2 (diff) | |
День 4, задача 3
See merge request saintruler/trainee!18
Diffstat (limited to 'day4/task3/db.py')
| -rw-r--r-- | day4/task3/db.py | 73 |
1 files changed, 73 insertions, 0 deletions
diff --git a/day4/task3/db.py b/day4/task3/db.py new file mode 100644 index 0000000..c23e9fb --- /dev/null +++ b/day4/task3/db.py @@ -0,0 +1,73 @@ +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<date>.*?)\]\[(?P<type>.*?)\]\[(?P<module>.*?)\]\[(?P<id>.*?)\] (?P<text>.*)') + + 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 |