Python3 压缩与解压缩(zlib / gzip / bz2 / lzma / zipfile / tarfile)

本文详细介绍了Python3中如何进行文件的压缩和解压缩操作,包括zlib、gzip、bz2、lzma、zipfile和tarfile等库的使用,适合实际开发中对文件压缩需求的开发者。作者强调了shutil模块在压缩和解压中的便捷性,并提及zipfile和tarfile的高级功能。
摘要由CSDN通过智能技术生成

Python3 压缩与解压缩(zlib / gzip / bz2 / lzma / zipfile / tarfile)


本文由 Luzhuo 编写,转发请保留该信息.
原文: http://blog.csdn.net/Rozol/article/details/72672703


以下代码以Python3.6.1为例
Less is more!
文件的归档 (各种格式的压缩 / 解压缩)
实际使用中仅需要使用shutil模块的压缩和解压函数就可以了, 如果想尝试其他功能, zipfile(暴力破解), tarfile(命令行)也是值得推荐的

#!/usr/bin/env python
# coding=utf-8
__author__ = 'Luzhuo'
__date__ = '2017/5/21'
# filscondense.py 文件的归档 (各种格式的压缩 / 解压缩)
# 实际使用中仅需要使用shutil模块的压缩和解压函数就可以了, 如果想尝试其他功能, zipfile(暴力破解), tarfile(命令行)也是值得推荐的

import zlib

def zlib_demo():
    # 对直接进行压缩
    data = b'luzhuo.me'

    com_bytes = zlib.compress(data)
    print("压缩后的数据: ", com_bytes)

    decom_bytes = zlib.decompress(com_bytes)
    print("解压后的数据: ", decom_bytes)


    # 对数据流进行压缩
    with open("file.txt", "rb") as read, open("com.txt", "wb") as write:
        com = zlib.compressobj(level=9, memLevel=9)
        for data in read:
            # 压缩数据并写入文件
            write.write(com.compress(data))
        write.write(com.flush())

    # 对数据流进行解压
    with open("com.txt", "rb") as read, open("temp.txt", "wb") as write:
        decom = zlib.decompressobj()
        for data in read:
            write.write(decom.decompress(data))
        write.write(decom.flush())


def zlib_func():
    '''
    zlib
    '''

    # zlib.adler32(data[, value]) // 计算数据的Adler-32校验和(比CRC32快), value:校验和的起始值(默认1)
    num = zlib.adler32(b"luzhuo.me")
    # zlib.crc32(data[, value]) // 计算数据的CRC(循环冗余校验)校验和, value:校验和的起始值,默认0
    num = zlib.crc32(b"luzhuo.me")

    # zlib.compress(data[, level])  // 压缩字节数据,返回压缩后的字节, level:[0,9],0:无压缩,1最小压缩,9最高压缩, 默认:6
    bytes = zlib.compress(b"luzhuo.me")
    # zlib.decompress(data[, wbits[, bufsize]])  // 解压缩, wbits:历史缓冲区(默认:15), bufsize:保存解压数据的缓冲区(默认:16384)
    bytes = zlib.decompress(bytes)

    # 压缩对象 level:压缩级别[0,9], method:压缩算法(DEFLATED), wbits:历史缓冲区大小,值越大,压缩效果更好(注:使用默认值), memLevel:内存量[1,9],值越大,效果更好更快
    # strategy:策略 Z_DEFAULT_STRATEGY / Z_FILTERED / Z_HUFFMAN_ONLY, zdict:压缩字典(预期频繁出现的字节序列)
    # zlib.compressobj(level=-1, method=DEFLATED, wbits=15, memLevel=8, strategy=Z_DEFAULT_STRATEGY[, zdict])
    com = zlib.compressobj(level=9, memLevel=9)
    # zlib.decompressobj(wbits=15[, zdict]) // 解压缩对象
    decom = zlib.decompressobj()

    strs = zlib.ZLIB_VERSION  # zlib版本
    strs = zlib.ZLIB_RUNTIME_VERSION  # 解释器运行的zlib版本

    # 压缩对象
    com_data = com.compress(b"luzhuo.me")  # 压缩数据
    # Compress.flush([mode]) // 完成剩余压缩数据的字节对象, mode:Z_SYNC_FLUSH(可进步压缩) / Z_FULL_FLUSH(可进步压缩) / Z_FINISH(完成压缩)
    data = com.flush()
    com.copy()  # 拷贝压缩对象副本

    # 解压缩对象
    # Decompress.decompress(data[, max_length])  // 解压
    data = decom.decompress(data)

    decom.unused_data  # 将要解压的数据
    decom.unconsumed_tail  # 未解压的数据
    decom.eof  # 数据流是否已结束
    decom.flush()  # 完成压缩, 无法再次解压, length:缓冲区大小
    decom.copy()

    # 异常
    try: pass
    except zlib.error: pass  # 压缩和解压缩错误而引发的异常


if __name__ == "__main__":
    zlib_demo()

    # zlib_func()

# ==================================




import gzip
import shutil
content = b"luzhuo.me"

def gzip_demo():

    # 类字节对象的压缩与解压
    # 压缩
    bytes_com = gzip.compress(content)
    print("字节压缩: ", bytes_com)
    bytes_decom = gzip.decompress(bytes_com)
    print("字节解压: ", bytes_decom)


    # 对gzip文件的读写操作
    # 写入
    with gzip.open('box.gz', 'wb') 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值