Hari Sekhon wrote:

> I've seen people using everything from zip to touch, either out of 
> laziness or out of the fact it wouldn't work very well in python, this 
> zip case is a good example.

so based on a limitation in one library, and some random code you've 
seen on the internet, you're making generalizations about the language ?

the zip case is a pretty lousy example, btw; after all, using the 
existing API, it's not that hard to implement an *incremental* read 
function if the provided read-into-string version isn't sufficient:

     import zipfile, zlib

     ##
     # Given a 'zip' instance, copy data from the 'name' to the
     # 'out' stream.

     def explode(out, zip, name):

        zinfo = zip.getinfo(name)

        if zinfo.compress_type == zipfile.ZIP_STORED:
            decoder = None
        elif zinfo.compress_type == zipfile.ZIP_DEFLATED:
            decoder = zlib.decompressobj(-zlib.MAX_WBITS)
        else:
            raise zipfile.BadZipFile("unsupported compression method")

        zip.fp.seek(zinfo.file_offset)

        size = zinfo.compress_size

        while 1:
            data = zip.fp.read(min(size, 8192))
            if not data:
                break
            size -= len(data)
            if decoder:
                data = decoder.decompress(data)
            out.write(data)

        if decoder:
            out.write(decoder.decompress('Z'))
            out.write(decoder.flush())

</F>

-- 
http://mail.python.org/mailman/listinfo/python-list

Reply via email to