Python压缩解压–gzip
原文链接:http://www.juzicode.com/python-tutorial-zip-unzip-gzip
本文介绍python的gzip模块压缩和解压缩文档,gzip只能对单个文档进行操作。
1、gzip.open() 创建文件实例压缩文件
gzip.open()方法会创建一个GzipFile文件实例,第1个参数filename为gz文件的名称。参数mode为打开文件的模式,支持’r’, ‘rb’, ‘a’, ‘ab’, ‘w’, ‘wb’, ‘x’ or ‘xb’ (二进制方式)或者 ‘rt’, ‘at’, ‘wt’, or ‘xt’(文本模式),缺省为 ‘rb’,一般使用‘rb’读取,‘wb’创建文件。参数compresslevel压缩等级默认为9。
下面这个例子中先用gzip.open()方法的’wb’模式创一个GzipFile文件实例,然后用rb模式从文件中读取数据,再用该文件实例的write()方法写入从文件中读取的数据,最后关闭文件实例:
#juzicode.com / VX:桔子code import gzip # 创建GzipFile实例 zf = gzip.open('logo.png.gz', mode = 'wb') print('type(zf):',type(zf)) data = open('logo.png','rb').read() # 简化描述未关文件 zf.write(data) # 写文件 zf.close() # 关闭
运行结果:
type(zf): <class 'gzip.GzipFile'>
从压缩后的结果可以看到,open()方法创建文件对象时,如果filename入参以gz结尾,压缩文件内部的名称就是gz后缀前面的一部分,比如用log.png.gz作为压缩文档的名称,在压缩文档内部的文件名称就为logo.png。
2、gzip.GzipFile创建文件实例压缩文件
和前面的过程类似,不过创建文件实例用的是 gzip.GzipFile():
#juzicode.com / VX:桔子code import gzip # 创建GzipFile实例 zf = gzip.GzipFile('logo2.png.gz', mode = 'wb') print('type(zf):',type(zf)) data = open('logo.png','rb').read() # 简化描述未关文件 zf.write(data) # 写文件 zf.close() # 关闭
3、gzip.comress()压缩数据后写文件
另外一种方法是用gzip.comress()方法将从文件中读出的数据进行压缩,再将压缩后的数据写入到文件中。
#juzicode.com / VX:桔子code import gzip pf = open('logo3.png.gz', 'wb') # open方法创建普通文件对象 data = open('logo.png','rb').read() # 简化描述未关文件 data_comp = gzip.compress(data) # 压缩数据 pf.write(data_comp) # 写文件 pf.close() # 关闭
运行结果:
从压缩文件看该方法和前2种效果是一样的。
下面这种方法更简便、更安全:
import gzip with open('logo31.png.gz', 'wb') as pw, open('logo.png','rb') as pr: pw.write(gzip.compress(pr.read()) )
4、解压文件
和前述3种生成压缩文件的方法对应,有3种解压gz文件的方式,这时打开文件用mode=’r’:
#juzicode.com / VX:桔子code import gzip zip_filename = 'logo.png.gz' with open('unzip\\logo1.png','wb') as pw: zf = gzip.open(zip_filename, mode = 'rb') pw.write(zf.read()) # 写文件 zf.close() with open('unzip\\logo2.png','wb') as pw: zf = gzip.GzipFile(zip_filename, mode = 'rb') pw.write(zf.read()) # 写文件 zf.close() with open(zip_filename, 'rb') as pr, open('unzip\\logo3.png','wb') as pw: pw.write(gzip.decompress(pr.read()) )
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· winform 绘制太阳,地球,月球 运作规律
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
· 超详细:普通电脑也行Windows部署deepseek R1训练数据并当服务器共享给他人