Почему файл закрывается без close?
Объясните, пожалуйста, почему при таком коде у меня выдаёт в консоли файл, только один раз, а после этого файл будто закрывается и выдаётся в терминал пустота?
f = open('first.txt', 'r')
print(f.read())
print(f.read())
print(f.readlines())
Результат:
Hello
Max
Hello
Python
[]
Однако если перед каждым принтом снова открывать файл через open, то результат будет нормальным
Ответы (2 шт):
Файл остаётся открытым, но после первого чтения курсор указывает на конец файла. Далее Вы пытаетесь читать с конца, поэтому ничего и не получаете.
Переместить курсор обратно в начало можно командой 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']
Файл не закрывается пока не выполнишь close() или доступна переменная с этим файлом.
У каждого файла есть курсор, первое чтение переносить курсор к последнему прочитанному байту - в вашем случае к концу файла. Второе и третье чтение у Вас с конца и до конца файла - но там нет новых данных.
Используй f.seek(0) чтоб передвинуть курсор в начало и прочитать файл с начала.