读写压缩文件(gzip,bz2)

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

# gzip compression
import gzip
with gzip.open('somefile.gz', 'rt') as f:
text = f.read()
# bz2 compression
import bz2
with bz2.open('somefile.bz2', 'rt') as f:
text = f.read()

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

# gzip compression
import gzip
with gzip.open('somefile.gz', 'wt') as f:
f.write(text)
# bz2 compression
import bz2
with bz2.open('somefile.bz2', 'wt') as f:
f.write(text)

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

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

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

默认的等级是 9,也是最高的压缩等级。等级越低性能越好,但是数据压缩程度也
越低。
最后一点,gzip.open() 和 bz2.open() 还有一个很少被知道的特性,它们可以作
用在一个已存在并以二进制模式打开的文件上。比如,下面代码是可行的:

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

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

你可能感兴趣的:(读写压缩文件(gzip,bz2))