美文网首页
python中使用zlib对文件的压缩和解压

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

作者: 那脸憔悴 | 来源:发表于2017-03-27 12:46 被阅读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它。

    相关文章

      网友评论

          本文标题:python中使用zlib对文件的压缩和解压

          本文链接:https://www.haomeiwen.com/subject/zgqrottx.html