本模块主要提供了支持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 深圳