zlib 压缩目录_gz格式压缩文件操作:gzip

本文约1050字,建议阅读时间4~6分钟

关键字:python,tar.gz,压缩文件,gzip

gz压缩格式在Linux系统中比较常见,而gzip模块主要用于由gzip和gunzip程序压缩地.gz格式文件的操作,其中数据压缩是由zlib模块提供的。gzip模块提供了GzipFile类及其方法可以很方便地对其进行操作。

1、公共方法

(1)压缩数据

data=b'1,2,a,b'

gzip.compress(data,compresslevel=9)

#返回bytes对象:

b'\x1f\x8b\x08\x00\xcc\xaf\x9b_\x02\xff3\xd41\xd2I\xd4I\x02\x00x\x85\x8b\x01\x07\x00\x00\x00'

#python3.8新增mtime参数

#注:data必须为bytes对象

(2)解压数据

data=b'\x1f\x8b\x08\x00\xcc\xaf\x9b_\x02\xff3\xd41\xd2I\xd4I\x02\x00x\x85\x8b\x01\x07\x00\x00\x00'

gzip.decompress(data)

#返回b'1,2,a,b'

#注:data必须为bytes对象

(3)打开压缩文件

import gzip

file=gzip.open(filename,mode=’rb’,compresslevel=9,encoding=None,errors=None,newline=None)

#返回文件对象

#filename为真实的压缩文件路径名(字符串或者bytes对象)或者已经存在的文件对象

#mode中'r', 'rb', 'a', 'ab', 'w', 'wb', 'x'和'xb'以二进制方式打开,'rt', 'at', 'wt'和'xt'以文本方式打开,默认为’rb’

#encoding为压缩文件数据的编码方式,有时需要指定

data=b'\x1f\x8b\x08\x00\x7f\xb0\x9b_\x02\xff3\xd41\xd2I\xd4I\x02\x00x\x85\x8b\x01\x07\x00\x00\x00'

with gzip.open(filename=r'E:\my_project\corpus.txt.gz',mode='wb') as f:

    f.write(data)

将在当前工作目录(采用os.getcwd()获取)下生成名为corpus.txt的gz格式压缩文件,里面包含corpus.txt的文本文件,因为压缩数据,所以文本文件打开显示乱码。

2、异常

gzip.BadGzipFile

#对于无效的gzip压缩文件将抛出该异常

3、GzipFile类

(1)对象的创建

fileobj=gzip.open(r'E:\my_project\corpus.txt.gz', mode='rb')

gzf=gzip.GzipFile(filename=None,mode=’rb’,compresslevel=9,fileobj=fileobj,mtime=None)

#返回gzip对象:

#mode'可以为r', 'rb', 'a', 'ab', 'w', 'wb', 'x'或 'xb',默认为’rb’

#compresslevel为0-9之间的整数,1为最快且最少的压缩,9为最慢且最多的压缩,0为五压缩,默认为9

#mtime为数值型的时间戳

fileobj可以为普通的文件,io.BytesIO对象或者与文件相似的其他对象,当为None时,filename将提供文件对象,当不为None时,filename只包含在压缩文件头中,filename和fileobj至少有一个不为None。

由于gzip对象只能以二进制形式打开,所以如果想以文本形式打开,建议使用open方法。gzip对象的close方法不会关闭fileobj。

(2)方法

从文件当前位置读取n个解压字节

gzf.peek(1)

#返回b'1,2,a,b'

#注:该方法返回的字节数有可能比请求的多或少

(3)属性

解压时的最后修改时间

gzf.mtime

(完)

24eb1e1f667617eb36c432250a1b3913.png

欢迎关注【lambda派】!

相关阅读:

路径常规操作os.path

序列化与反序列化:pickle

迭代器函数模块itertools

数理统计模块statistics

派生枚举类:IntEnum、IntFlag、Flag

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值