我正在开发一个纯 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
我个人使用这些比较频繁。因此,我编写了一个将类文件对象包装为缓冲区的模块。你可以在这里查看。