Подтвердить что ты не робот

Python - tempfile.TemporaryFile не может быть прочитан; Зачем?

Официальная документация для 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, который не будет автоматически удалять файлы, и мне не нужны именованные файлы)

4b9b3361

Ответ 1

Вы должны положить

f.seek(0)

перед попыткой прочитать файл (это отправит вас в начало файла) и

f.seek(0, 2)

чтобы вернуться к концу, чтобы вы могли заверить, что вы не перезапишете его.

Ответ 2

read() ничего не возвращает, потому что вы находитесь в конце файла. Вы должны позвонить seek() прежде, чем read() вернет что-нибудь. Например, поставьте эту строку перед первым read():

f.seek(-10, 1)

Конечно, прежде чем писать снова, обязательно seek() до конца (если вы хотите продолжить писать).