Python - временный файл. Невозможно прочитать временный файл; Зачем? - PullRequest
21 голосов
/ 30 июля 2009

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

Ответы [ 2 ]

36 голосов
/ 30 июля 2009

Вы должны поставить

f.seek(0)

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

f.seek(0, 2)

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

7 голосов
/ 30 июля 2009

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

f.seek(-10, 1)

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

...