python cookbook 学习笔记 第五章 文件与IO (7) 读写压缩文件

  • 读写压缩文件
  • 问题:
    • 想读写一个 gzip 或者 bz2 格式的压缩文件
  • 解决方案:
    • gzip 和 bz2 模块可以很容易的处理这些文件。两个模块都为 open() 函数提供了另外的实现来解决这个问题。比 如,为了以文本形式读取压缩文件,可以这样做:
import gzip
with gzip.open("somefile.gz", "rt") as f:
    text = f.read()

import bz2
with bz2.open("somefile.bz2", "rt") as f:
    text = f.read()
  • 类似,为了写入压缩数据,可以这样做:
with gzip.open("somefile.gz", "wt") as f:
    f.write(text)

with bz2.open("somefile.bz2", "wt") as f:
    f.write(text)
  • 如上,所有的 I/O 操作都使用文本模式并执行 Unicode 的编码或解码。如果像操作二进制文件,使用rb 或者wb文件模式即可。

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

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

with gzip.open("somefile.gz", "wt", compressleve= 5) as f:
    f.write(text)
  • 默认的等级是9,也是最高的压缩级别。等级越低性能越好,但是数据压缩程度也就越低。 最后,gzip.open() 和 bz2.open() 还有一个特性,它们可以作用在一个已存在并以二进制模式打开的文件上,比如:
f = open("somefile.gz", "rb")
with gzip.open(f, "rt") as g:
    text = g.read()
  • 这样就允许 gzip 和 bz2 模块工作在许多类文件对象上,比如套接字,管道和内存文件等。

猜你喜欢

转载自blog.csdn.net/qq_43539055/article/details/84889127