Я пишу генератор Python, который выглядит как "кот". Мой конкретный случай использования для "grep-подобной" операции. Я хочу, чтобы он мог выйти из генератора, если выполнено условие:
summary={}
for fn in cat("filelist.dat"):
for line in cat(fn):
if line.startswith("FOO"):
summary[fn] = line
break
Поэтому, когда происходит break
, мне нужен генератор cat()
для завершения и закрытия дескриптора файла для fn
.
Мне нужно прочитать 100 тыс. Файлов с 30 ГБ общих данных, и ключевое слово FOO
встречается в области заголовка, поэтому в этом случае важно, чтобы функция cat()
перестала читать файл как можно скорее.
Есть и другие способы решения этой проблемы, но мне все еще интересно знать, как получить ранний выход из генератора, у которого есть дескрипторы открытых файлов. Возможно, Python очищает их сразу и закрывает, когда генератор собирает мусор?
Спасибо
Ian