Python - tempfile.TemporaryFile non può essere letto; perché?
-
05-07-2019 - |
Domanda
La documentazione ufficiale per TemporaryFile recita:
Il parametro mode viene impostato automaticamente su 'w + b' in modo che il file creato possa essere letto e scritto senza essere chiuso .
Tuttavia, il codice seguente non funziona come previsto:
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()
L'output che ottengo è:
> python play.py
READ:
READ:
READ:
READ:
READ:
Qualcuno può spiegare questo comportamento? Esiste un modo per leggere da file temporanei? (senza dover usare il mkstemp di basso livello che non eliminerebbe automaticamente i file; e non mi interessa i file con nome)
Soluzione
Devi inserire
f.seek(0)
prima di provare a leggere il file (questo ti invierà all'inizio del file) e
f.seek(0, 2)
per tornare alla fine in modo da poter essere certi di non sovrascriverlo.
Altri suggerimenti
read ()
non restituisce nulla perché sei alla fine del file. Devi chiamare seek ()
prima che read ()
restituisca qualcosa. Ad esempio, metti questa riga davanti al primo read ()
:
f.seek(-10, 1)
Naturalmente, prima di scrivere di nuovo, assicurati di seek ()
fino alla fine (se è lì che vuoi continuare a scrivere).