Is negative seek() from EOF of a GzipFile supported on Python 2.5.2 ?

Mark Tolonen metolone+gmane at gmail.com
Sun Jan 11 14:08:18 EST 2009


"Barak, Ron" <Ron.Barak at lsi.com> wrote in message 
news:7F0503CD69378F49BE0DC30661C6CCF602494CBE at enbmail01.lsi.com...
> The source of gzip.py on my system seems to suggest that negative seeks 
> are supported:
>
>     def seek(self, offset):
>         if self.mode == WRITE:
>             if offset < self.offset:
>                 raise IOError('Negative seek in write mode')
>             count = offset - self.offset
>             for i in range(count // 1024):
>                 self.write(1024 * '\0')
>             self.write((count % 1024) * '\0')
>         elif self.mode == READ:
>             if offset < self.offset:
>                 # for negative seek, rewind and do positive seek
>                 self.rewind()
>             count = offset - self.offset
>             for i in range(count // 1024):
>                 self.read(1024)
>             self.read(count % 1024)
>
> Could any who're familiar with the inner working of gzip settle this issue 
> ?
> Is seek from EOF supported for gzip files ?

Source from 2.6.1.  Seek from EOF not supported:

    def seek(self, offset, whence=0):
        if whence:
            if whence == 1:
                offset = self.offset + offset
            else:
                raise ValueError('Seek from end not supported')
        if self.mode == WRITE:
            if offset < self.offset:
                raise IOError('Negative seek in write mode')
            count = offset - self.offset
            for i in range(count // 1024):
                self.write(1024 * '\0')
            self.write((count % 1024) * '\0')
        elif self.mode == READ:
            if offset < self.offset:
                # for negative seek, rewind and do positive seek
                self.rewind()
            count = offset - self.offset
            for i in range(count // 1024):
                self.read(1024)
            self.read(count % 1024)

-Mark





More information about the Python-list mailing list