Python模块 zlib压缩和解压文件的简单例子/开箱即用

直接用网上的代码最常用的那段代码,但是有BUG,跑不起来,所以改写了一下,包括读写的次数控制,错误的捕获抛出,Python3可以直接跑.

详细代码
import os
import zlib
import math

BUFFER_SIZE = 1024

def compress(infile, dstfile):
    filesize = os.path.getsize(infile)
    read_times = math.ceil(filesize / BUFFER_SIZE)  # 读取次数
    zip = zlib.compressobj(level=9, wbits=15, memLevel=9)

    try:
        dstfile = open(dstfile, "wb")
        with open(filename, "rb") as infile:
            for i in range(read_times):
                zip_buffer = zip.compress(infile.read(BUFFER_SIZE))
                dstfile.write(zip_buffer)
            dstfile.write(zip.flush())
    except:
        raise
    finally:
        dstfile.close()
        return 1


def decompress(zipfile, dstfile):
    filesize = os.path.getsize(zipfile)
    read_times = math.ceil(filesize / BUFFER_SIZE)
    dzip = zlib.decompressobj()

    try:
        dstfile = open(dstfile, "wb")
        with open(zipname, "rb")as zipfile:
            for i in range(read_times):
                file_buffer = dzip.decompress(zipfile.read(BUFFER_SIZE))
                dstfile.write(file_buffer)
    except:
        raise
    finally:
        dstfile.close()
        return 1


if __name__ == '__main__':
    filename = "demo.jpg"
    zipname = "demo.gzip"
    compress(filename, zipname)
    d_zipname = "demo.gzip"
    d_filename = "d_demo.jpg"
    decompress(d_zipname, d_filename)
比较源文件和解压文件的一致性
def check_consistance(filename1, filename2):
    file1_size = os.path.getsize(filename1)
    with open(filename1, "rb") as file1:
        buffer1 = file1.read(file1_size)
    file2_size = os.path.getsize(filename2)
    with open(filename2, "rb") as file2:
        buffer2 = file2.read(file2_size)
    if buffer1 == buffer2:
        return True
    else:
        return False
print(check_consistance(filename,d_filename))  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值