[ ]
ZhouSa.com 1. 数据压缩解压
压缩和解压说白了就是时间换空间,运算换存储的一种解决方案,标准库中的zlib和bz2模块都是数据压缩解压工具,他们的主要应用场景是数据传输.
注意压缩只能是bytes类型
在python3.4中新增了对lzma的支持,也就是说支持zx格式了,它除了有压缩字节序列的接口,也提供了直接从文本读取数据进行压缩的接口.同时bz2也新增了从对文件的压缩解压接口.
1.1. zlib
import zlib
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
1.1.1. 压缩compress(data[, level])
level是压缩等级(范围0~9),默认是6,1是最快单压缩最少的,9是最慢但压缩最多得,0表示不压缩
z_str=zlib.compress(exa_str.encode())
len(z_str)/len(exa_str.encode())
0.7527910685805422
可以看到默认level时压缩率在75%的样子
1.1.2. 解压
zlib.decompress(z_str).decode("utf-8")
'网易体育1月5日报道:\n\n国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友“小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。\n'
1.1.3. 自定义压缩和解压器
压缩器compressobj([level[, method[, wbits[, memLevel[, strategy]]]]])
- level 压缩等级,范围1~9,默认6
- method 压缩方法,目前只支持默认方法
- wbits 确定窗口缓冲区的大小,范围是8~15,越高效果越好,但占用内存越多
- memLevel 内部压缩状态存储等级,范围1~9,数值越大消耗内存越多,但更快压缩率更高
- strategy 压缩算法相关,可选值有
Z_DEFAULT_STRATEGY
,Z_FILTERED
,Z_HUFFMAN_ONLY
解压器decompressobj(wbits=15)
1.2. bz2
bz2和zlib接口差不多,只是使用的不同的算法
import bz2
1.2.1. 压缩compress(data[, level])
level是压缩等级(范围1~9),默认是9,1是最快单压缩最少的,9是最慢但压缩最多得
b_str = bz2.compress(exa_str.encode())
len(b_str)/len(exa_str.encode())
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
0
1.2.2. 解压decompress(data)
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
1
'网易体育1月5日报道:\n\n国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友“小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。\n'
1.2.3. 文件接口bz2.open(filename, mode='r', compresslevel=9, encoding=None, errors=None, newline=None)
在py3.3中新提供的压缩文件接口,通常用于处理.bz
格式的文件,在3.4中又进行了完善,目前支持的mode为:
- 字节序列可以使用'r', 'rb', 'w', 'wb', 'x', 'xb', 'a'或者'ab'
- 文本可以使用'rt', 'wt', 'xt' 或者 'at'
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
3
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
4
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
5
1.3. lzma(py3.4)
python3.4中提供了对lzma压缩算法的支持,现在它可以用于解压.xz
格式的文件或者压缩/解压字节序列
1.3.1. 压缩字节序列(compress)
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
6
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
7
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
8
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
9
1.3.2. 解压字节序列(decompress)
z_str=zlib.compress(exa_str.encode())
0
'网易体育1月5日报道:\n\n国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友“小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。\n'
1.3.3. 增量压缩
z_str=zlib.compress(exa_str.encode())
2
z_str=zlib.compress(exa_str.encode())
3
z_str=zlib.compress(exa_str.encode())
4
z_str=zlib.compress(exa_str.encode())
5
z_str=zlib.compress(exa_str.encode())
6
z_str=zlib.compress(exa_str.encode())
7
1.3.4. 文件接口lzma.open(filename, mode="rb", *, format=None, check=-1, preset=None, filters=None, encoding=None, errors=None, newline=None)
与bz2类似,lzma也提供了一个处理文件的接口,用法也大同小异
z_str=zlib.compress(exa_str.encode())
8
z_str=zlib.compress(exa_str.encode())
9
exa_str=u"""\ 网易体育1月5日报道: 国际足球历史和统计联合会(IFFHS)今日凌晨在其官网上公布了2015年度世界最佳组织者的评选结果,\ 巴塞罗那前锋梅西问鼎,这也是阿根廷人职业生涯首次当选年度最佳组织核心的荣誉。另外,梅西在巴萨的队友\ “小白”伊涅斯塔排在第二位,意大利球星皮尔洛力压切尔西王牌阿扎尔占据第三名的位置。值得一提的是,\ 排名前十的球员中有3个来自于皇马。此外,还一同公布了最佳教练的评选,巴萨主帅恩里克力压瓜迪奥拉、阿莱格里等名帅当选。 """
5
还没有评论,来说两句吧...