Ответ 1
Вы должны положить
f.seek(0)
перед попыткой прочитать файл (это отправит вас в начало файла) и
f.seek(0, 2)
чтобы вернуться к концу, чтобы вы могли заверить, что вы не перезапишете его.
Официальная документация для 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()
до конца (если вы хотите продолжить писать).