将多个文件流式传输到Python中的可读对象

我有一个函数,使用file.read(len)方法处理文件中的二进制数据.但是,我的文件很大,并且被分成许多小文件,每个50 MB.是否有一些包装类将许多文件提供给缓冲流,并提供read()方法?

类fileinput.FileInput可以做这样的事情,但它只支持逐行读取(没有参数的方法readline())并且没有read(len)指定要读取的字节数.

最佳答案 我不熟悉执行该功能的标准库中的任何内容,因此,如果没有:

try:
    from cStringIO import StringIO
except ImportError:
    from StringIO import StringIO

class ConcatenatedFiles( object ):
    def __init__(self, file_objects):
        self.fds= list(reversed(file_objects))

    def read( self, size=None ):
        remaining= size
        data= StringIO()
        while self.fds and (remaining>0 or remaining is None):
            data_read= self.fds[-1].read(remaining or -1)
            if len(data_read)<remaining or remaining is None: #exhausted file
                self.fds.pop()
            if not remaining is None:
                remaining-=len(data_read)
            data.write(data_read)
        return data.getvalue()
点赞