私は、オープンバイナリファイルをパラメータとして受け取り、それをEOFまでブロック読み込みを実行するAPIを使用しています。Python:開いているストリームにコンテンツを書き込む
既存のファイル(io.open mode 'rb')を開くのではなく、計算された/作成されたコンテンツを書き込むストリームを渡したいと思います。実際には、出力がある単方向パイプです。開いているファイルと交換可能な入力ストリームを介して配信されます。
私はBufferedRWPairを見ましたが、入出力オブジェクトに同じオブジェクトを使用しないという警告に違反していることがわかりました。
誰かが適切な例やより良い提案があれば、それは大歓迎です!
最初
更新 これ確かに厄介な例のショーを読んだ後これが終了し 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()
....として私はここのコメントに基づいてBufferedRandom見てきたが、私は明らかに間違って何かをやっています溶液を、独立したリードを維持し、記述する位置
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()
について:https://docs.python.org/3.6/library/io.html#io.Bufferedランダム – stovfl
私は自分自身の現在の読み書き位置を管理することなく(私は推測することなく)ストリームへの読み書きをインターリーブすることはできないようです。私はそれが同じ流れを持つことの自然な帰結だと思います。それは期待されていますか? – user9548