Файлы обрабатываются как выражения генератора по умолчанию, когда вы выполняете их. Если вы хотите перебирать файл несколько раз построчно, вы можете сначала преобразовать файл во что-то вроде списка.
========================================================================================================================================================================================================

от вопрос уже есть ответ здесь:

[Итерация по файлу с использованием Python](https://stackoverflow.com/questions/10255273/iterating-on-a-file-using-python) 4 ответаЯ пишу программу, которая требует от меня многократного перебора каждой строки файла:

Для краткости я предполагаю, что мне всегда нужно перебирать файл и печатать каждую строку 5 раз. Этот код имеет ту же проблему, что и более длинная версия, которую я реализовал в своей программе: файл повторяется только один раз. После этого`print(line)` файл ничего не делает Почему это?

Это потому что`file = open("somefile.txt")` Строка происходит только один раз, до цикла. При этом создается один курсор, указывающий на одно место в файле, поэтому, когда вы достигаете конца первого цикла, курсор находится в конце файла. Переместите это в цикл:



`for line in file` читает каждую строку один раз. Если вы хотите начать заново с первой строки, вы можете, например, закрыть и снова открыть файл.



 их можно повторять только один раз, прежде чем они будут исчерпаны. Попытка повторить итерацию приводит к повышению итератора`StopIteration` (сигнал, что ему нечего дать) немедленно.

Тем не менее, файловые объекты позволяют немного обмануть. В отличие от большинства других итераторов, вы можете перематывать их, используя их`seek` метод. Затем вы можете повторить их содержимое снова.

Другой вариант - открывать файл каждый раз, когда вам нужно выполнить итерацию. Это достаточно просто, но (без учета дискового кэша ОС) повторное чтение файла может быть немного расточительным.

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



[`seek()`](https://docs.python.org/3/library/io.html#io.IOBase.seek) вместо этого, если хотите.



 когда вы выполняете их. Если вы хотите перебирать файл несколько раз построчно, вы можете сначала преобразовать файл во что-то вроде списка.



 указатель указывает на последнюю строку в файле, поэтому попробуйте использовать file.seek (0) вместо того, чтобы открывать файл снова и снова в цикле