Python读写压缩文件的方法

作者:David Beazley 时间:2023-06-02 19:37:53 

问题

你想读写一个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 文件模式即可。

讨论

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

当写入压缩数据时,可以使用 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 模块可以工作在许多类文件对象上,比如套接字,管道和内存中文件等。

来源:https://python3-cookbook.readthedocs.io/zh_CN/latest/c05/p07_read_write_compressed_datafiles.html

标签:Python,读写,压缩文件
0
投稿

猜你喜欢

  • 使用Python paramiko模块利用多线程实现ssh并发执行操作

    2021-02-02 03:10:05
  • XML教程—编写结构完整的XML文档

    2008-10-11 13:43:00
  • Python实现笑脸检测+人脸口罩检测功能

    2022-06-24 04:01:49
  • Python中反转二维数组的行和列问题

    2021-06-24 13:48:27
  • ASP 相关文章或者相关产品

    2011-03-30 11:12:00
  • 利用mergeAttributes设置name属性

    2009-12-12 18:48:00
  • 如何利用python实现Simhash算法

    2021-06-13 20:12:49
  • Pycharm内置终端及远程SSH工具的使用教程图文详解

    2023-03-26 09:58:30
  • asp中提取HTML中图片的SRC路径

    2008-10-24 08:42:00
  • Python如何对齐字符串

    2023-05-30 01:21:11
  • TensorFlow tf.nn.softmax_cross_entropy_with_logits的用法

    2021-03-20 19:55:17
  • python解析yaml文件过程详解

    2023-09-30 13:13:51
  • python神经网络使用tensorflow构建长短时记忆LSTM

    2021-10-13 19:23:39
  • 初步认识Python中的列表与位运算符

    2022-06-28 18:10:51
  • Python数据分析基础之文件的读取

    2022-10-16 21:25:21
  • 用Python展示动态规则法用以解决重叠子问题的示例

    2023-02-09 02:20:36
  • 基于python3 pyQt5 QtDesignner实现窗口化猜数字游戏功能

    2022-02-05 00:56:54
  • SQL Server与Oracle、DB2的优劣对比

    2009-01-07 14:16:00
  • Python使用add_subplot与subplot画子图操作示例

    2022-12-15 13:14:28
  • 用Python编程实现语音控制电脑

    2022-01-06 22:53:57
  • asp之家 网络编程 m.aspxhome.com