5.7 读写压缩文件

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

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

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

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

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

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