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