python中使用zlib对文件的压缩和解压

2017-03-27  本文已影响0人  那脸憔悴
#coding: utf-8

import zlib

#压缩

def compressor(infile, dst, level=6):

    infile = open(infile, ''rb'')

    dst = open(dst, ''wb'')

    compress = zlib.compressobj(level)

    data = infile.read(128)

    while data:

        dst.write(compress.compress(data))

        data = infile.read(128)

        dst.write(compress.flush())

        infile.close()

    dst.close()

#解压

def decompressor(infile, dst):

    infile = open(infile, ''rb'')

    dst = open(dst, ''wb'')

    decompress = zlib.decompressobj()

    data = infile.read(128)

    while data:

        dst.write(decompress.decompress(data))

        data = infile.read(128)

        dst.write(decompress.flush()) 

        infile.close()

    dst.close()

if __name__ == ''__main__'':

    compressor("test.txt", "test_zlib")

    decompressor("test_zlib", "test_zlib.txt")

zlib的一些函数:

  1. zlib.adler32(s [,crc]) 返回字符串的Adler32校验码。参数''crc''用于增量校验。Adler32校验比普通CRC32校验快。Adler32校验只能用于检测数据是否损坏,而不用于加密。

  2. zlib.compress(s [,level]) 压缩字符串。参数''level''指定压缩的等级,范围从1至9,默认值为6。

  3. zlib.crc32(s [,crc]) 返回字符串的CRC32校验码。参数''crc''用于增量校验。CRC32校验只能用于检测数据是否损坏,而不用于加密。

  4. zlib.decompress(s [,winsize [,buffsize]]) 解压字符串。参数''winsize''指定窗口缓冲区的大小,默认是15。参数''buffsize''指定解压缓冲区的大小,默认是16384。

  5. zlib.compressobj([level]) 创建压缩对象。该压缩对象可以增量逐步压缩字符串块,同时保留先前压缩的内部状态参数。参数''level''指定压缩的等级,范围从1至9,默认值为6。

  6. zlib.decompressobj([winsize]) 创建解压对象。该解压对象可以增量逐步解压字符串块,同时保留先前解压的内部状态参数。参数''winsize''指定窗口缓冲区的大小,默认是15。

zlib的一些方法和属性:

  1. zlib.compressobj.compress(s) 添加需要压缩的数据。如果数据足够则返回相应的压缩数据,否则返回空字符串。

  2. zlib.compressobj.flush([mode]) 生成完整的压缩数据。参数''mode''默认为Z_FINISH,即该压缩对象不再使用,这时应该''del''它。如果指定Z_SYNC_FLUSH或Z_FULL_FLUSH,压缩对象仍然可以使用,但原先的压缩数据将不再保留。

  3. zlib.decompressobj.unused_data 就像上面那个例子显示的那样,zlib.decompressobj.unused_data是一个属性而不是方法,其中包含任何还未能处理的解压数据。

  4. zlib.decompressobj.decompress(s) 添加解压缩数据。返回解压出的数据,未处理的保留在zlib.decompressobj.unused_data

  5. zlib.decompressobj.flush() 返回全部解压数据。如果解压对象不再使用,您应该del它。

上一篇下一篇

猜你喜欢

热点阅读