Python - временный файл. Невозможно прочитать временный файл; Зачем?
-
05-07-2019 - |
Вопрос
официальная документация для TemporaryFile гласит:
Параметр режима по умолчанию равен 'w + b' чтобы файл, созданный , можно было прочитать и написано без закрытия .
Тем не менее, приведенный ниже код не работает должным образом:
import tempfile
def play_with_fd():
with tempfile.TemporaryFile() as f:
f.write('test data\n')
f.write('most test data\n')
print 'READ:', f.read()
f.write('further data')
print 'READ:', f.read()
f.write('even more')
print 'READ:', f.read()
print 'READ:', f.read()
print 'READ:', f.read()
if __name__ == '__main__':
play_with_fd()
Вывод, который я получаю:
> python play.py
READ:
READ:
READ:
READ:
READ:
Кто-нибудь может объяснить это поведение? Есть ли способ читать из временных файлов вообще? (без использования низкоуровневого mkstemp, который не будет автоматически удалять файлы; и мне не нужны именованные файлы)
Решение
Вы должны поставить
f.seek(0)
перед попыткой прочитать файл (это отправит вас в начало файла) и
f.seek(0, 2)
чтобы вернуться к концу, чтобы вы могли быть уверены, что не перезапишете его.
Другие советы
read ()
ничего не возвращает, потому что вы находитесь в конце файла. Вам нужно позвонить в seek ()
. прежде чем read ()
вернет что-либо. Например, поместите эту строку перед первым read ()
:
f.seek(-10, 1)
Конечно, перед повторной записью обязательно до конца seek ()
(если вы хотите продолжить запись).