Python: TemporaryFile возвращает пустую строку при чтении - PullRequest
3 голосов
/ 26 марта 2011

Мне нужно создать файл из строки, чтобы я мог использовать его в качестве вложения для электронного письма в Django. После некоторого поиска в Google я нашел модуль tempfile с TemporaryFile, но он не работает, как я ожидаю.

следующий код возвращает пустую строку.

>>> f = tempfile.TemporaryFile()
>>> f.write('foobar')
>>> f.read()
''

Ответы [ 3 ]

6 голосов
/ 26 марта 2011

Когда вы вызываете read, он пытается прочитать с того места, где остановился, что находится в конце файла. Вам нужно перейти к началу файла, прежде чем вы его прочитаете:

f.seek(0)
f.read()

Если вам нужно написать снова, вы должны перейти до конца, прежде чем писать, если вы не хотите перезаписывать свои материалы:

f.seek(0, os.SEEK_END)
f.write('some stuff')
1 голос
/ 26 марта 2011

, если в памяти уже есть строка, вы можете использовать StringIO или cStringIO для имитации файла поверх строки.Это должно быть намного быстрее, так как дисковые операции вообще не будут выполняться.

1 голос
/ 26 марта 2011

Попробуйте выполнить f.seek(0) для перемотки в начало между записью и чтением.Вызов read() всегда оставляет «указатель файла» (который является своего рода указательным пальцем операционной системы, указывающим на то, что нужно помнить, в каком месте файла вы сейчас находитесь) на конце данных, которые у вас естьнаписано.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...