Как заново перепройти текстовый файл, когда строки в нем закончились?

Рейтинг: 1Ответов: 1Опубликовано: 16.03.2023

Для работы итеративного скрипта мне необходимо построчно читать текстовый файл постоянно, пока не закончится время работы скрипта. Т.е. на каждую итерацию скрипта необходима одна строка текстового файла. Но количество итераций может в десятки, сотни и тысячи раз превосходить количество строк в файле. Соответственно, когда последняя строка окажется пустой мне необходимо вернуть контекстный менеджер на первую строку и так постоянно, пока не закончится работа скрипта.

Выглядит это примерно так:

with open('test.txt', encoding='utf-8') as damp:
    while True: #здесь будет ограничение по времени работы скрипта
        line = damp.readline()
        if not line:
            ??? #здесь надо начать заново читать файл
        do_something

Знаю, что есть специальная команда возврата к первой строке, но не могу ее нагуглить. И подойдет ли она для полного перезапуска построчного чтения файла или я просто вернусь к первой строке, а в следующей итерации условие if not line: снова вернет True?

Ответы

▲ 2

Не самая лучшая практика в данном случае работать напрямую с файлом, но тем не менее, используя seek(0) можно вернуться в начало файла

файл test.txt

hello
row1
row2
row3
row4

добавим row5 в конец, проверим по условию его наличие и выйдем из цикла:

with open('test.txt','r+', encoding='utf-8') as damp:
    while True:
        line = damp.readline()
        print(line)
        if line == 'row5':
            break
        if not line:
            damp.write('\nrow5')
            print('----добавили row5----')
            damp.seek(0)
    

Вывод:

hello

row1

row2

row3

row4

----добавили row5----
hello

row1

row2

row3

row4

row5