Python - tempfile.TemporaryFile não pode ser lido; porque?
-
05-07-2019 - |
Pergunta
O documentação oficial para TemporaryFile lê-se:
Os padrões de parâmetro para o modo de 'w + b' para que o arquivo criado pode ser lido e escrito sem ser fechados .
No entanto, o abaixo código não funciona como esperado:
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()
A saída que eu vejo é:
> python play.py
READ:
READ:
READ:
READ:
READ:
Alguém pode explicar esse comportamento? Existe uma maneira de ler a partir de arquivos temporários em tudo? (Sem ter que usar o mkstemp de baixo nível que não iria apagar automaticamente os arquivos, e eu não me importo com arquivos chamados)
Solução
Você deve colocar
f.seek(0)
antes de tentar ler o arquivo (isso vai mandar você para o início do arquivo) e
f.seek(0, 2)
para voltar ao fim para que você possa garantir que você não irá substituí-lo.
Outras dicas
read()
não retorna nada, porque você está no final do arquivo. Você precisa chamar seek()
antes read()
retornará nada. Por exemplo, colocar esta linha em frente do primeiro read()
:
f.seek(-10, 1)
É claro que, antes de escrever novamente, certifique-se de seek()
até o fim (se isso é onde você quer continuar a escrever a).