Форум сайта python.su
0
Есть файл events.txt с данными. Нужно написать программу, которая считывает файл и выводит число событий NOK за каждую минуту. Проблема в том, что мое решение не учитывает самую последнюю строку файла и я не знаю как это исправить. (не учитывает последнюю строку содержащую NOK)
Содержимое файла events.txt :
Мой код:
file_name = 'events.txt' prev_line = '' count = 1 with open(file_name, 'r') as file: for line in file: line = line[:-1] if line.endswith('NOK'): line = line[1:17] if line == prev_line: count += 1 else: if prev_line: print(prev_line, count) count = 1 prev_line = line
Отредактировано vladimir_vl_vlad (Май 24, 2022 03:01:59)
Офлайн
857
>>> import itertools >>> import io >>> >>> text = """\ ... [2018-05-17 11:30:58.873687] NOK ... [2018-05-17 11:30:58.873687] OK ... [2018-05-17 11:30:59.873687] NOK ... [2018-05-17 11:31:29.873687] OK ... [2018-05-17 11:31:41.873687] NOK ... [2818-05-17 11:32:13.873687] OK ... [2818-05-17 11:32:27.873687] OK ... [2918-05-17 11:32:29.873687] OK ... [2818-05-17 11:33:11.873687] NOK ... [2218-05-17 11:33:48.873687] OK ... [2818-05-17 11:34:16.873687] OK ... [2218-05-17 11:34:58.873687] NDK ... [2018-05-17 11:35.34.873687] OK""" >>> >>> ifp = io.StringIO(text) >>> >>> filtered_stream = (i for i in ifp if i.endswith('NOK\n')) >>> groups = itertools.groupby(filtered_stream, key=lambda i: i[1:17]) >>> for key, grp in groups: ... print(key, len(tuple(grp))) ... 2018-05-17 11:30 2 2018-05-17 11:31 1 2818-05-17 11:33 1 >>>
vladimir_vl_vladТам надо полноценный конечный автомат делать. Для этого делается цикл while, а чтение производится через функцию next().
Проблема в том, что мое решение не учитывает самую последнюю строку файла
Отредактировано py.user.next (Май 24, 2022 07:03:39)
Офлайн