zl程序教程

您现在的位置是:首页 >  其他

当前栏目

10.2 gzip--支持操作gzip文件库

文件 操作 -- 支持 gzip 10.2
2023-09-14 09:10:35 时间

本模块主要提供了对gzip文件格式的操作,可以像gzipgunzip程序一样对文件进行压缩和解压缩的工作。本模块实现的相关功能是基于模块zlib的功能之上进行的。gzip模块提供了一个类GzipFile,它可以使用的函数有open()compress()decompress()GzipFile类可以读取和写入gzip格式的文件,它会自动地压缩写入的数据和对读取出来的数据进行解压缩,使用起来就像普通的文件对象一样。

 

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

打开一个gzip压缩的文件,可以是二进制或文本的方式打开,返回一个文件对象。参数filename是一个新的文件名称,或者一个存在文件进行读写;参数mode是打开文件的方式,可以选择二进制:'r', 'rb', 'a', 'ab', 'w', 'wb', 'x' or 'xb' 或者文本:'rt', 'at', 'wt', or 'xt',默认是rb模式;参数compresslevel09可选,是压缩级别;参数encoding是文本方式时要指明文本采用什么方式进行解析,如果采用二进制方式读写,就不要提供本参数,以及errorsnewline等参数。

 

class gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)

GzipFile类的构造函数,它是模拟文件对象的功能。本函数支持文件名称方式读写文件,也支持提供文件对象fileobj方式进行读取文件,两者只能选择中一个使用,不能同时存在。参数mtime是压缩时写入文件流的时间,如果没有提供就会采用当前系统时间。其它参数与上面的函数一样。

 

peek([n])

读取n个未压缩的字节数据,但不移动文件读取位置。

 

gzip.compress(data, compresslevel=9)

压缩数据data,返回包含压缩数据的bytes文件对象。参数compresslevel与前面的构造函数意义是一样。

 

gzip.decompress(data)

解压数据data,返回包括解压数据的bytes文件对象。

 

写入数据的压缩例子:

#python 3.4

import gzip

 

test = b'http://blog.csdn.net/caimouse'

#写入压缩的文件

with gzip.open('file.txt.gz', 'wb') as f:

    f.write(test)

 

#读取压缩的文件

with gzip.open('file.txt.gz', 'rb') as f:

    file = f.read()

    print(file)

结果输出如下:

b'http://blog.csdn.net/caimouse'

 

对已经存在的文件进行压缩例子:

#python 3.4

import gzip

 

#对已经存在的文件进行压缩

with open('difflib12.py', 'rb') as fRead:

    with gzip.open('file.txt.gz', 'wb') as f:

        f.writelines(fRead)

 

#读取压缩的文件

with gzip.open('file.txt.gz', 'rb') as f:

    file = f.read()

    print(file)

结果输出如下:

b"#python3.4.3\r\n\r\nimport difflib\r\n\r\nword = '\xe6\xb7\xb1\xe5\x9c\xb3'\r\nposs = ['\xe6\xb7\xb1\xe5\xb1\xb1\xe9\x87\x8c\xe7\x9a\x84\xe5\x9c\xb3', '\xe6\xb7\xb1\xe5\xb1\xb1\xe9\x87\x8c\xe7\x9a\x84\xe5\x9c\xb32', '\xe6\x9d\xa5\xe8\xbf\x87\xe6\xb7\xb1\xe5\x9c\xb3', '\xe6\x9d\xa5\xe8\xbf\x87\xe5\x9c\xb3\xe6\xb7\xb1']\r\n\r\nprint(word, ':')\r\nfor line in difflib.get_close_matches(word, poss):\r\n    print(line)\r\n\r\nword = '\xe6\xb7\xb1\xe5\x9c\xb32'\r\nprint(word, ':')\r\nfor line in difflib.get_close_matches(word, poss):\r\n    print(line)\r\n"

 

对二进制进行压缩的例子:

#python 3.4

import gzip

 

#对二进制压缩的例子

indata = b'http://blog.csdn.net/caimouse'

outdata = gzip.compress(indata)

print(outdata)

 

txtout = gzip.decompress(outdata)

print(txtout)

结果输出如下:

b'\x1f\x8b\x08\x00\x07{\xc6V\x02\xff\xcb())\xb0\xd2\xd7O\xca\xc9O\xd7K.N\xc9\xd3\xcbK-\xd1ON\xcc\xcc\xcd/-N\x05\x00\xea..\xd7\x1d\x00\x00\x00'

b'http://blog.csdn.net/caimouse'

 


蔡军生   QQ:9073204  深圳