Обработка файла в функции генератораPython

Программы на Python
Anonymous
Обработка файла в функции генератора

Сообщение Anonymous »

Я должен создать генератор, который принимает имя файла или файлового объекта, слова, которые мы ищем в строке, и стоп-слова, которые говорят нам, что мы должны пропустить эту строку, как только мы их встретим.
Я написал функцию-генератор, но обратил внимание, что в моей реализации я не могу быть уверен, что если я открою файл, то он потом закроется, потому что не гарантируется, что генератор достигнет конца своей итерации.

Код: Выделить всё

def gen_reader(file, lookups, stopwords):
is_file = False
try:
if isinstance(file, str):
file = open(file, 'r', encoding='UTF-8')
is_file = True
except FileNotFoundError:
raise FileNotFoundError('File not found')

else:
lookups = list(map(str.lower, lookups))
stop_words = list(map(str.lower, stopwords))
for line in file:
original_line = line
line = line.lower()
if any(lookup in line for lookup in lookups) \
and not any(stop_word in line for stop_word in stop_words):
yield original_line.strip()
if is_file:
file.close()
Я собирался использовать контекстный менеджер «с» и поместить в него код поиска, но если бы у меня уже был файл, я бы написал тот же код еще раз, и это не помогло бы. было бы неплохо, не так ли?
Каковы ваши идеи, как я могу улучшить свой код, я их рассмотрел.

Подробнее здесь: https://stackoverflow.com/questions/790 ... r-function

Вернуться в «Python»