本文约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
(完)
欢迎关注【lambda派】!
相关阅读:
路径常规操作os.path
序列化与反序列化:pickle
迭代器函数模块itertools
数理统计模块statistics
派生枚举类:IntEnum、IntFlag、Flag