IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]10.4 lzma--支持LZMA算法压缩和解压

    caimouse发表于 2016-05-15 08:14:01
    love 0

    本模块主要提供了支持LZMA算法进行压缩和解压数据。本模块的功能与bz2的功能比较相似,不过要注意的是本模块不支持线程安全,如果多线程操作本模块需要自己添加锁机制。

     

    exception lzma.LZMAError

    当在压缩和解压缩过程中出错会抛出此异常。

     

    lzma.open(filename, mode="rb", *, format=None, check=-1, preset=None, filters=None, encoding=None, errors=None, newline=None)

    以二进制或文本的方式打开LZMA压缩的文件,返回文件对象。参数filename可以文件名称,或者文件对象;参数mode是打开文件的方式:"r", "rb", "w", "wb", "x", "xb", "a", "ab", "rt", "wt", "xt", "at";

     

    class lzma.LZMAFile(filename=None, mode="r", *, format=None, check=-1, preset=None, filters=None)

    打开一个LZMAFile压缩的文件进行读写。

     

    peek(size=-1)

    查看缓冲里的数据,文件读取位置不作调整。

     

    class lzma.LZMACompressor(format=FORMAT_XZ, check=-1, preset=None, filters=None)

    创建一个压缩对象,可以进行增量式进行压缩数据。参数format是指定选择包容器的格式:FORMAT_XZ,FORMAT_ALONE,FORMAT_RAW;参数check是指明采用什么类型检验方式:CHECK_NONE/CHECK_CRC32/CHECK_CRC64/CHECK_SHA256;参数preset是介于0到9之间,值越大压缩越好,速度越慢;参数filters是指定过滤器。

     

    compress(data)

    压缩数据返回bytes数据对象。调用此函数之后,最后需要调用flush()函数来完成压缩数据。

     

    flush()

    完成压缩过程,把未曾压缩的数据立即进行压缩并返回。

     

    class lzma.LZMADecompressor(format=FORMAT_AUTO, memlimit=None, filters=None)

    创建一个解压对象,它用来增量式解压数据。参数format是指定解压的格式,可选:FORMAT_XZ,FORMAT_ALONE,FORMAT_RAW,默认是FORMAT_AUTO格式;参数memlimit是指明解压时使用多大的内存;参数filters是解压数据中的过滤器。

     

    decompress(data)

    解压data输入的数据,返回解压后的bytes数据对象。

     

    check

    检验码的ID。

     

    eof

    如果已经解压结束返回True。

     

    unused_data

    压缩流里未曾使用的数据。

     

    lzma.compress(data, format=FORMAT_XZ, check=-1, preset=None, filters=None)

    能够一次性地压缩的数据进行压缩。参数定义与前面函数一样。

     

    lzma.decompress(data, format=FORMAT_AUTO, memlimit=None, filters=None)

    能够一次性地解压缩的数据进行解压。参数定义与前面函数一样。

     

    lzma.is_check_supported(check)

    检查是否支持check的检验码方式,如果支持返回True。

     

    对xz文件操作的例子:

    #python 3.4

    import lzma

     

    data = b"http://blog.csdn.net/caimouse"

    with lzma.open("file.xz", "w") as f:

        f.write(data)

     

    with lzma.open("file.xz", "r") as f:

        test = f.read()

        print(test)

    结果输出如下:

    b'http://blog.csdn.net/caimouse'

     

    采用增加地压缩的例子:

    #python 3.4

    import lzma

     

    #增量地压缩数据

    lzc = lzma.LZMACompressor()

    out1 = lzc.compress(b"Some data\n")

    out2 = lzc.compress(b"Another piece of data\n")

    out3 = lzc.compress(b"Even more data\n")

    out4 = lzc.flush()

    #所有压缩的数据:

    result = b"".join([out1, out2, out3, out4])

    print(result)

    结果输出如下:

    b'\xfd7zXZ\x00\x00\x04\xe6\xd6\xb4F\x02\x00!\x01\x16\x00\x00\x00t/\xe5\xa3\xe0\x00.\x00+]\x00)\x9b\xc9\xa6gB-8\xa2k\x95V\x1b\xc7\xccb\x8f\xf2\xe7\xe0\x13\x12\xc8\xdc\xaf(\x10\xdf\xb0\xc1\x1a\x95$\xf4\xde\x0f\xc1~l\x1d\xa6 \x00\x00\x00,\xdc\xbd\xb54c,$\x00\x01G/\xb0Qo4\x1f\xb6\xf3}\x01\x00\x00\x00\x00\x04YZ'



    蔡军生  QQ:9073204  深圳



沪ICP备19023445号-2号
友情链接