目录

Python数据压缩神器

一、前言:

  • 我使用数据压缩之前,我们先要思考一下,我们为什么要进行数据压缩。
  • 数据压缩有利有弊,好处是当数据量大的时候我们能够节省空间;坏处是节省空间的同时也带来了时间上的消耗,也就是所谓的以时间换取空间。
  • 当然,需不需要进行数据压缩还是要看具体的需求,毕竟压缩率越高,所需的时间消耗也会越高。
  • zlib是提供数据压缩用的函式库,由Jean-loup Gailly与Mark Adler所开发,初版0.9版在1995年5月1日发表。zlib使用DEFLATE算法,最初是为libpng函式库所写的,后来普遍为许多软件所使用。此函式库为自由软件,使用zlib授权。截至2007年3月,zlib是包含在Coverity的美国国土安全部赞助者选择继续审查的开源项目。
  • Python3中已经内置了zlib库。

二、zlib的使用:

  • zlib的使用非常方便,一般我们只需要掌握两个方法就可以了

compress(data,[.level])

  • data为待压缩的二进制数据,level为可选参数,0~9,级别越高压缩率越高,相对的耗时越高,默认为9

decompress(data)

  • data为待解压数据

  • 示例代码如下:

      import zlib
    
      str = b"hello word, i am anjie"
      # ---- 压缩数据流。
      str1 = zlib.compress(str, zlib.Z_BEST_COMPRESSION)
      str2 = zlib.decompress(str1)
      print('数据为压缩长度%d  '%len(str))
      print('数据压缩后长度%d'%len(str1))
      print('数据解压后长度%d'%len(str2))
    
  • 执行结果如下:

      数据为压缩长度22  
      数据压缩后长度30
      数据解压后长度22
    
  • 不敢相信,居然压缩了还变长了,这其实跟压缩原理有关,最简单的说就是数据中相同的数据点越多,压缩率就越高,不同点越多,压缩率越低,比如我们该一下数据再试一下。

  • 代码修改为:

      import zlib
    
      str = b"hello word, i am anjie000000000000000000000000000000000000000000000000000000000"
      str1 = zlib.compress(str, zlib.Z_BEST_COMPRESSION)
      str2 = zlib.decompress(str1)
      print('数据为压缩长度%d  '%len(str))
      print('数据压缩后长度%d'%len(str1))
      print('数据解压后长度%d'%len(str2))
    
  • 结果输出为:

      数据为压缩长度79  
      数据压缩后长度33
      数据解压后长度79
    
  • 以后咱就可以想压就压了