Home | History | Annotate | Download | only in zlib
      1 #!/usr/bin/env python

      2 
      3 # Takes an optional filename, defaulting to this file itself.

      4 # Reads the file and compresses the content using level 1 and level 9

      5 # compression, printing a summary of the results.

      6 
      7 import zlib, sys
      8 
      9 def main():
     10     if len(sys.argv) > 1:
     11         filename = sys.argv[1]
     12     else:
     13         filename = sys.argv[0]
     14     print 'Reading', filename
     15 
     16     f = open(filename, 'rb')           # Get the data to compress

     17     s = f.read()
     18     f.close()
     19 
     20     # First, we'll compress the string in one step

     21     comptext = zlib.compress(s, 1)
     22     decomp = zlib.decompress(comptext)
     23 
     24     print '1-step compression: (level 1)'
     25     print '    Original:', len(s), 'Compressed:', len(comptext),
     26     print 'Uncompressed:', len(decomp)
     27 
     28     # Now, let's compress the string in stages; set chunk to work in smaller steps

     29 
     30     chunk = 256
     31     compressor = zlib.compressobj(9)
     32     decompressor = zlib.decompressobj()
     33     comptext = decomp = ''
     34     for i in range(0, len(s), chunk):
     35         comptext = comptext+compressor.compress(s[i:i+chunk])
     36     # Don't forget to call flush()!!

     37     comptext = comptext + compressor.flush()
     38 
     39     for i in range(0, len(comptext), chunk):
     40         decomp = decomp + decompressor.decompress(comptext[i:i+chunk])
     41     decomp=decomp+decompressor.flush()
     42 
     43     print 'Progressive compression (level 9):'
     44     print '    Original:', len(s), 'Compressed:', len(comptext),
     45     print 'Uncompressed:', len(decomp)
     46 
     47 if __name__ == '__main__':
     48     main()
     49