我有一个使用 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()

关于python - 将多个文件流式传输到 Python 中的可读对象中,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/24528278/

10-12 15:55