Ich arbeite mit einer API, die eine geöffnete Binärdatei als Parameter akzeptiert und dann blockierende Lesevorgänge bis EOF ausführt.Python: Inhalt in einen offenen Stream schreiben
Anstatt eine vorhandene Datei (io.open Modus 'rb') zu öffnen, möchte ich einen Stream übergeben, den ich berechneten/konstruierten Inhalt schreibe - in der Tat will ich etwas, das konzeptionell eine unidirektionale Leitung ist, wo die Ausgabe ist wird über einen Eingabestream bereitgestellt, der mit einer geöffneten Datei austauschbar ist.
Ich habe BufferedRWPair angeschaut, aber die wenigen Beispiele, die ich finden konnte, verstoßen gegen die Warnungen, nicht dasselbe Objekt für die Eingabe- und Ausgabeseiten zu verwenden.
Wenn jemand ein passendes Beispiel oder einen besseren Vorschlag hat, ist es willkommen!
Ich habe bei BufferedRandom sah basierend auf Kommentare hier, aber ich bin offensichtlich etwas falsch, wie zu tun .... import io buf = io.BufferedRandom(io.BytesIO()) buf.write("a") buf.write("b") buf.flush() while True: print "reading" a = buf.read(1024) if not a: break print "read: {}".format(a) buf.close()
Dies beendet, nachdem die zuerst lesen
Update Diese zugegebenermaßen unordentlich Beispiel zeigt die Lösung, unabhängig Lese pflegen zu müssen und Schreibpositionen
import io
buf = io.BufferedRandom(io.BytesIO())
read = 0
wrote = 0
buf.seek(wrote)
wrote += buf.write(b"a")
wrote += buf.write(b"b")
buf.seek(read)
data = buf.read(1)
read += len(data)
buf.seek(wrote)
wrote += buf.write(b"c")
print "read: {}".format(data)
buf.seek(read)
data = buf.read(512)
read += len(data)
wrote += buf.write(b"d")
buf.seek(wrote)
wrote += buf.write(b"efghihjlmnop")
while data:
print "read: {}".format(data)
buf.seek(read)
data = buf.read(1024)
read += len(data)
buf.close()
Lesen Sie über: https://docs.python.org/3.6/library/io.html#io.Buffered Random – stovfl
Nicht ganz, weil es nicht zulässt, dass ich Lese- und Schreibvorgänge im Stream interleave, ohne (ich denke) die aktuellen Lese- und Schreibpositionen selbst zu verwalten. Ich schätze, das ist eine natürliche Konsequenz des gleichen Stroms. Wird das erwartet? – user9548