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

来源:互联网 发布:神马快递打印软件 编辑:程序博客网 时间:2024/06/06 07:37

本模块主要提供了支持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_XZFORMAT_ALONEFORMAT_RAW;参数check是指明采用什么类型检验方式:CHECK_NONE/CHECK_CRC32/CHECK_CRC64/CHECK_SHA256;参数preset是介于09之间,值越大压缩越好,速度越慢;参数filters是指定过滤器。

 

compress(data)

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

 

flush()

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

 

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

创建一个解压对象,它用来增量式解压数据。参数format是指定解压的格式,可选:FORMAT_XZFORMAT_ALONEFORMAT_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  深圳

0 0