concatenate file-like objects -> file-like object

Marc 'BlackJack' Rintsch bj_666 at gmx.net
Wed Jul 11 02:17:45 EDT 2007


On Tue, 10 Jul 2007 17:55:52 -0700, kgk wrote:

> I would like to concatenate several file-like objects
> to create a single file-like object.  I've looked at fileinput,
> however
> this returns a fileinput object that is not very file-like.
> 
> something like
> # a has 50 bytes, and b has 100 bytes
> f = FileList (open('a'), open('b'))
> f.read (100)  #  read 50 bytes from a and 50 from b
> 
> My interest is in passing several files to an incremental parser
> as if they came from a single file.   I would rather not load them
> in memory using StringIO and the parser reads only from file-like
> objects.

Then program a file like object yourself.  Something like this (untestet):

class FileList(object):
    def __init__(self, files):
        self.files = reversed(files)
        self.current_file = self.files.pop()
    
    def read(size):
        result = ''
        while self.files:
            data = self.current_file.read(size)
            result += data
            if len(data) != size:
                self.current_file = self.files.pop()
                size = size - len(data)
        return result

Ciao,
	Marc 'BlackJack' Rintsch



More information about the Python-list mailing list