IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

    [原]10.2 gzip--支持操作gzip文件库

    caimouse发表于 2016-05-07 20:08:47
    love 0

    本模块主要提供了对gzip文件格式的操作,可以像gzip和gunzip程序一样对文件进行压缩和解压缩的工作。本模块实现的相关功能是基于模块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模式;参数compresslevel是0到9可选,是压缩级别;参数encoding是文本方式时要指明文本采用什么方式进行解析,如果采用二进制方式读写,就不要提供本参数,以及errors和newline等参数。

     

    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  深圳



沪ICP备19023445号-2号
友情链接