The gzip
module allows you to read and write gzip-compressed files as if
they were ordinary files, as shown in Example 5-24.
The standard implementation doesn’t support the
seek
and tell
methods.
Example 5-25 shows how to add forward seeking.
Example 5-25. Extending the gzip Module to Support seek/tell
File: gzip-example-2.py import gzip class gzipFile(gzip.GzipFile): # adds seek/tell support to GzipFile offset = 0 def read(self, size=None): data = gzip.GzipFile.read(self, size) self.offset = self.offset + len(data) return data def seek(self, offset, whence=0): # figure out new position (we can only seek forwards) if whence == 0: position = offset elif whence == 1: position = self.offset + offset else: raise IOError, "Illegal argument" if position < self.offset: raise IOError, "Cannot seek backwards" # skip forward, in 16k blocks while position > self.offset: if not self.read(min(position - self.offset, 16384)): break def tell(self): return self.offset # # try it file = gzipFile("samples/sample.gz") file.seek(80) print file.read()this the 127th
Upperclass Twit of the Year Show.
3.141.37.10