Python - временный файл. Невозможно прочитать временный файл; Зачем?

StackOverflow https://stackoverflow.com/questions/1202848

Вопрос

официальная документация для 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 () (если вы хотите продолжить запись).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top