как создать генератор, который достает строки из файла?
имеется некий файл - file.txt
его содержимое:
[2018-05-14 19:37:47.873687] OK
[2018-05-14 19:38:25.873687] NOK
[2018-05-14 19:38:39.873687] OK
[2018-05-14 19:38:48.873687] NOK
[2018-05-14 19:38:50.873687] NOK
[2018-05-14 19:38:58.873687] NOK
[2018-05-14 19:39:43.873687] OK
[2018-05-14 19:39:46.873687] OK
[2018-05-14 19:39:49.873687] NOK
[2018-05-14 19:40:33.873687] NOK
[2018-05-14 19:41:05.873687] OK
[2018-05-14 19:41:46.873687] OK
[2018-05-14 19:42:29.873687] OK
имеется код:
def generator():
nok_dict = {}
with open('file.txt', 'r') as file:
for line in file:
if 'NOK' in line:
slice = line[1:17]
if slice in nok_dict:
nok_dict[slice] += 1
else:
nok_dict[slice] = 1
как из этого кода написать генератор, который читает файл file.txt и выдает число событий NOK за каждую минуту? <время> <число повторений>
пример:
grouped_events = <создание генератора>
for group_time, event_count in grouped_events:
print(f'[{group_time}] {event_count}')
на консоли должно появится что-то вроде
[2018-05-17 01:57] 1234
Ответы (1 шт):
Автор решения: insolor
→ Ссылка
Открытие файла лучше не прятать внутрь генератора, а передавать в генератор итерируемый объект (в данном случае файл), из которого генератор формирует обработанные данные.
def generator(file):
prev_time = None
noc_count = 0
for line in file:
if 'NOK' in line:
time = line[1:17]
if time != prev_time:
if prev_time is not None:
yield prev_time, noc_count
prev_time = time
noc_count = 0
noc_count += 1
if noc_count > 0:
yield prev_time, noc_count
with open('file.txt', 'r') as file:
for group_time, event_count in generator(file):
print(f'[{group_time}] {event_count}')
На ваших данных результат такой:
[2018-05-14 19:38] 4
[2018-05-14 19:39] 1
[2018-05-14 19:40] 1