python3 zlib 实现压缩与解压字符串与文件数据流
关于python3 zlib 压缩解压情况总结如下:
- 字符串:使用zlib.compress方法压缩字符串,使用zlib.decompress方法解压字符串。
- 数据流:压缩:zlib.compressobj方法压缩数据流,解压:zlib.decompressobj方法压缩数据流。
其方法在python3.4手册中说明如下:
手册链接:点击打开链接
从中可以看出,对于python3来说,zlib.compress方法处理的对象为数据的bytes类型,而不是直接处理字符串!在方法中直接输入字符串错误如下:
代码案例:
import zlib
import requests# zlib.compress 用来压缩字符串的bytes类型
def str_zlib():req = requests.get("http://python.jobbole.com/81513/")message = req.textbytes_message = str.encode(message) # 采用爬虫的结果作为输入数据compressed = zlib.compress(bytes_message, zlib.Z_BEST_COMPRESSION)decompressed = zlib.decompress(compressed) # str、repr的区别print("original string:", len(message))print("original bytes:", len(bytes_message))print("compressed:", len(compressed))print("decompressed:", len(decompressed))# zlib.compressobj 用来压缩数据流,用于文件传输
def file_compress(beginFile, zlibFile, level):infile = open(beginFile, "rb")zfile = open(zlibFile, "wb")compressobj = zlib.compressobj(level) # 压缩对象data = infile.read(1024) # 1024为读取的size参数while data:zfile.write(compressobj.compress(data)) # 写入压缩数据data = infile.read(1024) # 继续读取文件中的下一个size的内容zfile.write(compressobj.flush()) # compressobj.flush()包含剩余压缩输出的字节对象,将剩余的字节内容写入到目标文件中def file_decompress(zlibFile, endFile):zlibFile = open(zlibFile, "rb")endFile = open(endFile, "wb")decompressobj = zlib.decompressobj()data = zlibFile.read(1024)while data:endFile.write(decompressobj.decompress(data))data = zlibFile.read(1024)endFile.write(decompressobj.flush())def main():# 测试字符串的压缩与解压str_zlib()# 测试数据流压缩beginFile = "./beginFile.txt"zlibFile = "./zlibFile.txt"level = 9file_compress(beginFile, zlibFile, level)# 测试数据流解压zlibFile = "./zlibFile.txt"endFile = "./endFile.txt"file_decompress(zlibFile, endFile)if __name__=="__main__":main()
说明:
1. str与repr类型的区别参考:点击打开链接
2. 对于数据类型bytes参考:点击打开链接
3. 其中,对于compressobj方法来说,返回的是压缩对象,相比较compress方法,区别为:用于压缩一次无法放入内存的数据流(即分批次压缩)。
compressobj
(level=-1, method=DEFLATED, wbits=15, memLevel=8, strategy=Z_DEFAULT_STRATEGY)
主要参数如下:
- level是压缩级别 - 一个从0到9的整数。值1是最快的方式但压缩效果不理想,而值9是最慢的方式但压缩效果最好。 0没有压缩。默认值是6。
- wbits是窗口缓冲区大小的基本两倍对数。这是从8到15的整数。较高的值会提供更好的压缩效果,但会使用更多的内存。
- memLevel参数控制用于内部压缩状态的内存量。有效值范围从1到9。较高的值使用更多的内存,但更快并产生较小的输出。
参考链接:
https://www.cnblogs.com/kaituorensheng/p/5448761.html 点击打开链接
https://docs.python.org/3/library/zlib.html 点击打开链接
python3 zlib 实现压缩与解压字符串与文件数据流相关推荐
- java文件压缩与解压_Java实现文件压缩与解压
Java实现ZIP的解压与压缩功能基本都是使用了Java的多肽和递归技术,可以对单个文件和任意级联文件夹进行压缩和解压,对于一些初学者来说是个很不错的实例.(转载自http://www.puiedu. ...
- 算法 - 赫夫曼编码(对字符串进行压缩 与 解压(解码)) - (对文件进行压缩解压)
1.压缩:使用赫夫曼编码进行压缩 题目 构建赫夫曼树 package tree.huffmantree;import java.util.*;public class HuffmanCode {pub ...
- 【ubuntu】压缩与解压 .tar 类型文件
目录 1.压缩为 .tar 类型文件 2.解压缩 .tar 文件 1.压缩为 .tar 类型文件 tar -cvf absl.tar absl/ 结果展示: 2.解压缩 .tar 文件 tar -xv ...
- 【简便解法】1078 字符串压缩与解压 (20分)_42行代码AC
立志用更少的代码做更高效的表达 Pat乙级最优化代码+题解+分析汇总-->传送门 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符 ...
- 1078 字符串压缩与解压 (20 分)
文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来表示.如果字符没有重复,就原样输出.例如 ...
- C++学习之路 | PTA乙级—— 1078 字符串压缩与解压 (20 分)(精简)
1078 字符串压缩与解压 (20 分) 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来 ...
- 1078. 字符串压缩与解压 (20)-PAT乙级真题
文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来表示.如果字符没有重复,就原样输出.例如 ...
- 字符串压缩与解压 题解
题目描述 文本压缩有很多种方法,这里我们只考虑最简单的一种:把由相同字符组成的一个连续的片段用这个字符和片段中含有这个字符的个数来表示.例如 ccccc 就用 5c 来表示.如果字符没有重复,就原样输 ...
- linux中常用的压缩、解压命令详解
不管在windows中还是在linux中,我们会经常看到各种压缩的文件,此刻我们需要使用就得解压,在这就介绍介绍linux中解压.压缩的命令. 在做实验之前,我们先创建几个文件,大小都是100M,方便 ...
最新文章
- html5类选择器选择权重,Python Html5和CSS3的新增功能:CSS权重与CSS3新增选择器
- [转]如果我有jQuery背景,我应该如何切换到AngularJS的思维模式?
- 资源 | 斯坦福最新NLP课程上线,选择PyTorch放弃TensorFlow
- Oracle 物理结构(六) 文件-数据文件
- pandas使用idxmax函数获取dataframe每个数据行中最大值对应的列名称(column label of max value in each row in dataframe)
- 微服务开发框架 SpringCloud
- SpringBoot项目去除druid监控的底部广告
- 布同:pdf自定义分割(断章)
- 点喷丸打标机行业调研报告 - 市场现状分析与发展前景预测(2021-2027年)
- php 上楼梯问题 递归,算法:爬楼梯问题中的递归
- 测试报告包含哪些内容?(超详细,带图)
- google浏览器添加抓包插件
- java生产者消费者 阻塞_java之使用阻塞队列实现生产者,消费者模式
- 暴躁的一天从Ubuntu搜狗拼音开始
- 阿里云大数据ACP(三)可视化 Quick BI
- 开启binary log功能
- 数学建模:整数规划—指派模型与匈牙利算法
- word/ppt 中怎么在数字字母上面加横线、波浪线、箭头等符号
- 古诗名句分类二:事理哲理
- 免费公测 标贝声音理解,检测声音性别和年龄
热门文章
- 记录关于利用txt文件划分训练集、测试集与验证集
- Zynq术语详解,不懂啥是PL,PS,APU,SCU?那就进来看看吧
- Win8系统mscomctl.ocx缺失的解决方法 run-time error 339
- CSSAPP稀里糊涂的读书笔记(一)计算机系统漫游
- 表连接on 和where的区别
- linux系统中网关ip修改设置命令大全
- 判定图中存在回路java_图示电路中二极管为理想二极管,请判断它是否导通,并求出 u 0 。 (7.0分)_学小易找答案...
- 60行JavaScript代码写俄罗斯方块
- php函数名命名规范,PHP语言的命名规则
- 永久60服务器消息,魔兽世界怀旧服:永久60级已经成为了另一个游戏,这如你所愿吗?...