JustCaptain kod-buduschego
main
Перейти к файлу
Код
task_7.py
"""
Уровень 3. Генераторные конвейеры

7. Анализ логов сервера

Файл содержит миллионы строк.

Необходимо построить конвейер:

Файл
↓
Только ERROR
↓
Только ошибки базы данных
↓
Подсчет количества

Ограничение

Нельзя загружать весь файл в память.

Что отрабатывается

- цепочки генераторов
- потоковая обработка данных
"""

from typing import Generator


def read_log(path: str) -> Generator[str]:
    with open(file=path, mode="r", encoding="utf-8") as file:
        for line in file:
            yield line.strip()


def fillter_error(lines: Generator[str]):
    for line in lines:
        if "ERROR" in line:
            yield line


def fillter_database(lines: Generator[str]):
    for line in lines:
        if "Database" in line:
            yield line


def count_items(items):
    count: int = 0
    for _ in items:
        count += 1
    return count


log_lines: Generator[str] = read_log(path="logs.txt")
errors = fillter_error(lines=log_lines)
db_erros = fillter_database(lines=log_lines)
result = count_items(items=db_erros)
print(result)