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)

È stato utile?

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).

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top