Frage

Die offizielle Dokumentation für TemporaryFile lautet:

  

Der Modus Parameter standardmäßig auf 'w + b'   so dass die Datei erstellt gelesen werden kann   und geschrieben, ohne geschlossen .

Doch nicht der folgende Code nicht wie erwartet:

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

Der Ausgang ich erhalte, ist:

> python play.py 
READ: 
READ: 
READ: 
READ: 
READ: 

Kann jemand dieses Verhalten erklären? Gibt es eine Möglichkeit von temporären Dateien überhaupt zu lesen? (Ohne dass der Low-Level-mkstemp verwenden, die nicht automatisch die Dateien löschen würden, und ich kümmere mich nicht um benannte Dateien)

War es hilfreich?

Lösung

Sie müssen setzen

f.seek(0)

, bevor Sie versuchen, die Datei zu lesen (dies wird Sie an den Anfang der Datei senden) und

f.seek(0, 2)

bis zum Ende zurück, so können Sie versichern, es nicht überschrieben werden.

Andere Tipps

read() nichts zurückgibt, weil Sie am Ende der Datei sind. Sie müssen rufen Sie seek() bevor read() etwas zurück. Zum Beispiel setzen Sie diese Zeile vor dem ersten read():

f.seek(-10, 1)

Natürlich, bevor er wieder zu schreiben, müssen Sie bis zum Ende seek() (wenn das ist, wo Sie das Schreiben fortgesetzt werden soll).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top