Почему файл закрывается без close?

Объясните, пожалуйста, почему при таком коде у меня выдаёт в консоли файл, только один раз, а после этого файл будто закрывается и выдаётся в терминал пустота?

f = open('first.txt', 'r')

print(f.read())

print(f.read())

print(f.readlines())

Результат:

Hello
Max
Hello
Python


[]

Однако если перед каждым принтом снова открывать файл через open, то результат будет нормальным


Ответы (2 шт):

Автор решения: nomnoms12

Файл остаётся открытым, но после первого чтения курсор указывает на конец файла. Далее Вы пытаетесь читать с конца, поэтому ничего и не получаете.

Переместить курсор обратно в начало можно командой f.seek(0).

Пример:

f = open('first.txt')


print(f.read())
f.seek(0)

print(f.read())
f.seek(0)

print(f.readlines())
f.close()

stdout:

Hello
Max
Hello
Python

Hello
Max
Hello
Python

['Hello\n', 'Max\n', 'Hello\n', 'Python\n']
→ Ссылка
Автор решения: eri

Файл не закрывается пока не выполнишь close() или доступна переменная с этим файлом.

У каждого файла есть курсор, первое чтение переносить курсор к последнему прочитанному байту - в вашем случае к концу файла. Второе и третье чтение у Вас с конца и до конца файла - но там нет новых данных.

Используй f.seek(0) чтоб передвинуть курсор в начало и прочитать файл с начала.

→ Ссылка