入力データのサイズがキロバイトからギガバイトに及ぶ可能性がある純粋なPythonパーサーに取り組んでいます。ファイルのようなオブジェクトをラップし、明示的な .open()/.seek()/.read()/.close() 呼び出しを単純なバッファのようなオブジェクトに抽象化するモジュールはありますか? これは、StringIO の逆と考えることができます。次のようになると思います。
with FileLikeObjectBackedBuffer(urllib.urlopen("http://www.google.com")) as buf:
header = buf[0:0x10]
footer = buf[-0x10:]
注、昨日同様mmap
の質問をし、ファイルを受け入れました。ここでは、ファイルのようなオブジェクトをラップするモジュールを具体的に探しています (引数のために、 によって返されるもののように言いますurllib
)。
更新
最初に質問して以来、この質問に繰り返し戻ってきましたurllib
が、最良の例ではなかった可能性があります。ストリーミング インターフェイスであるため、これは少し特殊なケースです。より伝統的な//インターフェイスStringIO
をbz2
公開し、個人的にはこれらをより頻繁に使用します。したがって、ファイルのようなオブジェクトをバッファーとしてラップするモジュールを作成しました。ここで確認できます。seek
read
close