@Iceforest

Как встроить итератор или генератор в уже написанный парсер python?

есть файл логов с ошибками, написал парсер без использования генератора/итератора нужно каким то образом модифицировать его, чтобы встроить туда либо генератор либо итератор как встроить, не могу понять. вот сам код парсера:
class Parser:

    def __init__(self, file_name):
        self.file_name = file_name
        self.dates = {}
        self.j = 17
        self.date_str = ''

    def parse_file(self):
        with open(self.file_name, 'r', encoding='utf-8') as file:
            for line in file:
                if 'NOK' not in line:
                    continue
                self.counter(line=line)

    def counter(self, line):
        self.date_str = line[1:self.j]
        if self.date_str in self.dates:
            self.dates[self.date_str] += 1
        else:
            self.dates[self.date_str] = 1

    def result(self):
        for k, v in self.dates.items():
            print(f'[{k}] {v}')

    def run(self):
        self.parse_file()
        self.result()



file_name = 'events.txt'
parse = Parser(file_name=file_name)
parse.run()
  • Вопрос задан
  • 55 просмотров
Решения вопроса 1
@Zanak
1. Понять, по каким данным желаем итерировать. Если по разобранным данным, то меняем parse_file/counter чтобы она возвращала результат разбора, если по результатам расчета, то создаем метод/методы, для реализации генератора/итератора.
2. Все подготовительные операции должны быть сделаны до начала возможных итераций. Как минимум - это открыть файл, как максимум - произвести предварительный расчет.
3. В случае генератора мы правим counter или result, чтобы она использовала yield current_value для отдачи вызывающей стороне текущего значения (в зависимости от того, что хотим возвращать).
4. В случае итератора реализуем __iter__ и __next__ методы, первый вернет собственно сам итератор, а второй возвращает текущее значение. За подробностями предлагаю сходить в документацию :)

Вроде ни чего не забыл. :)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы