Q:

Как снова начать считывать файл с первой строки при достижении последней строки

Имеется код, нужно начать считывание файла с начала при достижении последней строки.
file = open('file.txt', 'r') #в файле 20 строк
for i in range(40):
    line = file.readline()
file.close()

A:

Используйте метод seek чтобы переместить указатель.
Код ниже 40 раз выведет первую строку файла:
with open('file.txt', 'r') as f:
    for i in range(40):
        line = f.readline()

        # Возвращаемся к началу файла
        f.seek(0)

А код ниже выведет все строки из файла, переместит указатель в начало файла и еще раз выведет строки:
with open('file.txt', 'r') as f:
    for line in f:
        print(repr(line))

    # Возвращаемся к началу файла
    f.seek(0)

    print("Еще раз!")

    for line in f:
        print(repr(line))

Можно еще поиграться с итераторами.
Суть в том, что мы создадим итератор и будем дергать из него строки файла и если достигнем конца, то тот выбросит исключение StopIteration, а мы это поймаем и вернемся в начало файла:
with open('file.txt', 'r') as f:
    it = iter(f)

    for i in range(40):
        try:
            line = next(it)
        except StopIteration:
            f.seek(0)

            line = next(it)

        print(i, repr(line))

Но это, по сути, велосипед. Т.к. в ответе рядом через cycle и islice происходит тоже самое :)

