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