python——【1】gzip压缩文件

        gzip一般针对单个文件进行压缩,因此需要对多个文件进行压缩时,需要先将多个文件打包成一个文件,再进行压缩。打包多个文件为一个文件时,采用压缩方式,非压缩方式根据需要决定,一般打包为*.tar文件。

gzip模块压缩文件,依然是文件存储的三个步骤:

  1. 创建文件对象
    gz_file = gzip.GzipFile(…)
  2. 写入内容
    gz_file.write(…)
  3. 文件对象关闭
    gz_file.close()
具体说明(说明其中一种用法)
1 创建文件对象
gz_file = gzip.GzipFile(filename="image.jpg",
           mode="wb", compresslevel=9, fileobj=open("C:\\test.gzip", "wb"))
【参数说明】
	filename: 需要被压缩文件的名称
	mode:和普通文件的模式相同,读或写等,此时创建压缩文件,因此为写模式
	compresslevel: 压缩级别,取值为0~9,9为最大压缩比
	fileobj: 此处参数为压缩文件对象,其它可选为io.BytesIO对象,或其他类似文件对象
2 写入内容
gz_file.write(value) 
【参数说明】
	value应为bytes对象
3 关闭文件
gz_file.close()

以下sample采用同一个文件:C:\img.jpg
【sample1】保存压缩文件到硬盘

In [1]: import gzip
# 创建要写入压缩文件的测试数据
In [2]: f = open("C:\\img.jpg", "rb")
In [3]: value = f.read()
In [4]: f.close()

In [5]: gz_file = gzip.GzipFile(filename="img.jpg", mode="wb".
			compresslevel=9,
			fileobj=open("C:\\test.gzip","wb"))
In [6]: gz_file.write(value)
Out[6]: 53773 # 返回写入的字节数,即原始文件的大小,大小等于 len(value)
In [7]: gz_file.close()

在这里插入图片描述
【sample2】使用io.BytesIO保存压缩后的文件内容到内存

In [1]: import gzip
In [2]: from io import BytesIO
# 创建要写入压缩文件的测试数据
In [3]: f = open("C:\\img.jpg", "rb")
In [4]: value = f.read()
In [5]: f.close()

In [6]: str_io = BytesIO()
In [7]: gz_file = gzip.GzipFile(filename="img.jpg", mode="wb",
compresslevel=9, fileobj=str_io)
In [8]. gz_file.write(value)
Out[8]: 53773
In [9]: gz_file.close()
# 此时压缩后的文件内容已经保存到BytesIO中,使用ByteIO.getvalue()函数获取内容
In [10]: v = str_io.getvalue() # 以二进制格式比较保存在硬盘的文件与v所包含的内容
                               # 除4~7(索引从0开始)字节可能不同外,其余内容完全相同
                               # 其中4~7字节表示时间戳,因此可能存在不同
In [11]: len(v)
Out[11]: 50910 # 大小等于压缩后文件的大小,如下图显示压缩文件大小一致

压缩文件大小

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值