python3 zlibModule 字符串、文件的压缩和解压.py

"""
字符串、文件的压缩和解压 - zlib 入门。
模块:python3 zlibModule 字符串、文件的压缩和解压.py
参考:https://blog.csdn.net/heyshheyou/article/details/79894002
知识点:
    1.参考《zlib 知识点.txt》
"""
import zlib


def zlib_str():
    """
    字符串的压缩与解压。
    :return:
    """
    message = 'hello world!'
    bytes_message = message.encode()
    compressed = zlib.compress(bytes_message, zlib.Z_BEST_COMPRESSION)
    decompressed = zlib.decompress(compressed)
    print("message:", message)
    print("len(message):", len(message))
    print("bytes_message:", bytes_message)
    print("len(bytes_message):", len(bytes_message))
    print("compressed:", compressed)
    print("len(compressed):", len(compressed))
    print("decompressed:", decompressed)
    print("len(decompressed):", len(decompressed))


# zlib.compressobj 用来压缩数据流,用于文件传输
def file_compress(beginFile, zlibFile, level):
    """
    文件压缩。
    :param beginFile: 待压缩的文件。
    :param zlibFile: 压缩后的文件。
    :param level: 压缩水平(级别)。
    :return:
    """
    infile = open(beginFile, "rb")
    zfile = open(zlibFile, "wb")
    compressobj = zlib.compressobj(level)  # 压缩对象
    data = infile.read(1024)  # 1024为读取的size参数
    while data:
        zfile.write(compressobj.compress(data))  # 写入压缩数据
        data = infile.read(1024)  # 继续读取文件中的下一个size的内容
    zfile.write(compressobj.flush())  # compressobj.flush()包含剩余压缩输出的字节对象,将剩余的字节内容写入到目标文件中
    infile.close()
    zfile.close()


def file_decompress(zlibFile, endFile):
    """
    文件解压缩。
    :param zlibFile: 待解压的文件。
    :param endFile: 解压后的文件。
    :return:
    """
    zlibFile = open(zlibFile, "rb")
    endFile = open(endFile, "wb")
    decompressobj = zlib.decompressobj()
    data = zlibFile.read(1024)
    while data:
        endFile.write(decompressobj.decompress(data))
        data = zlibFile.read(1024)
    endFile.write(decompressobj.flush())
    zlibFile.close()
    endFile.close()


def main():
    # zlib_str()

    # # 2.数据流(文件)压缩
    # beginFile = "./zlib 知识点.txt"
    # zlibFile = "./zlibFile.txt"
    # level = 9
    # file_compress(beginFile, zlibFile, level)

    # 3.数据流(文件)解压
    zlibFile = "./zlibFile.txt"
    endFile = "./endFile.txt"
    file_decompress(zlibFile, endFile)


if __name__ == "__main__":
    main()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值