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

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

Итерация по файлу с использованием Python 4 ответа

Я пишу программу, которая требует от меня многократного перебора каждой строки файла:

loops = 0
file = open("somefile.txt")
while loops < 5:
    for line in file:
        print(line)
    loops = loops + 1

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

Ответы на вопрос(6)

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

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

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

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

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

for loop in range(5):
    with open('somefile.txt') as fin:
        for line in fin:
            print(fin)

seek() вместо этого, если хотите.

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

lines = open("somefile.txt").read().splitlines()

for line in lines:
    print(line)

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

    with open('a.txt','r+')as f:
        for i in range(0,5):
            for line in f:
                print(line)
            f.seek(0)
Решение Вопроса

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

loops = 0
while loops < 5:
    file = open("somefile.txt")
    for line in file:
        print(line)
    loops = loops + 1

Ваш ответ на вопрос