Python gzip和bz2模块 读写.gz 和.bz2压缩文件

原创

Python gzip和bz2模块 读写.gz 和.bz2压缩文件

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接: https://blog.csdn.net/weixin_43866211/article/details/102610860
         <!--一个博主专栏付费入口结束-->
        <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d284373521.css">
                                    <link rel="stylesheet" href="https://csdnimg.cn/release/phoenix/template/css/ck_htmledit_views-d284373521.css">
            <div class="htmledit_views" id="content_views">
                                        <h1><a name="t0"></a>读写压缩文件</h1>

问题

你想读写一个gzip或bz2格式的压缩文件。

解决方案

gzip 和 bz2 模块可以很容易的处理这些文件。 两个模块都为 open() 函数提供了另外的实现来解决这个问题。 比如,为了以文本形式读取压缩文件,可以这样做:


 
 
  1. # gzip compression
  2. import gzip
  3. with gzip.open( 'somefile.gz', 'rt') as f:
  4. text = f.read()
  5. # bz2 compression
  6. import bz2
  7. with bz2.open( 'somefile.bz2', 'rt') as f:
  8. text = f.read()

类似的,为了写入压缩数据,可以这样做:


 
 
  1. # gzip compression
  2. import gzip
  3. with gzip.open( 'somefile.gz', 'wt') as f:
  4. f.write(text)
  5. # bz2 compression
  6. import bz2
  7. with bz2.open( 'somefile.bz2', 'wt') as f:
  8. f.write(text)

如上,所有的I/O操作都使用文本模式并执行Unicode的编码/解码。 类似的,如果你想操作二进制数据,使用 rb 或者 wb 文件模式即可。

讨论

大部分情况下读写压缩数据都是很简单的。但是要注意的是选择一个正确的文件模式是非常重要的。 如果你不指定模式,那么默认的就是二进制模式,如果这时候程序想要接受的是文本数据,那么就会出错。 gzip.open() 和 bz2.open() 接受跟内置的 open() 函数一样的参数, 包括 encodingerrorsnewline 等等。

当写入压缩数据时,可以使用 compresslevel 这个可选的关键字参数来指定一个压缩级别。比如:


 
 
  1. with gzip.open( 'somefile.gz', 'wt', compresslevel= 5) as f:
  2. f.write(text)

默认的等级是9,也是最高的压缩等级。等级越低性能越好,但是数据压缩程度也越低。

最后一点, gzip.open() 和 bz2.open() 还有一个很少被知道的特性, 它们可以作用在一个已存在并以二进制模式打开的文件上。比如,下面代码是可行的:


 
 
  1. import gzip
  2. f = open( 'somefile.gz', 'rb')
  3. with gzip.open(f, 'rt') as g:
  4. text = g.read()

这样就允许 gzip 和 bz2 模块可以工作在许多类文件对象上,比如套接字,管道和内存中文件等。

文章最后发布于: 2019-10-17 17:08:47
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值