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

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

大家好,又见面了,我是你们的朋友全栈君。

读写压缩文件

问题

你想读写一个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://javaforall.net/142729.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • OSPF路由协议_ospf协议是一种什么路由协议

    OSPF路由协议_ospf协议是一种什么路由协议OSPF:开放式最短路径优先协议无类别链路状态路由协议,组播更新224.0.0.5/6;跨层封装到三层,协议号89;基于拓扑工作,故更新量大—–需要结构化部署–区域划分、地址规划触发更新、每30min周期更新OSPF的数据包:Hello包DBD–数据库描述包LSR–链路状态请求LSU–链路状态更新携带各种LSALSack–链路状态确认状态机—-OSP…

    2025年6月25日
    0
  • 大数据平台展示可视化效果,echarts图表实战项目(源码50套)「建议收藏」

    大数据平台展示可视化效果,echarts图表实战项目(源码50套)「建议收藏」最近接了个任务需要用H5在前台两个大电视上做两页数据展示公司的产品数据,效果要高大上,充分展示咱们公司的实力,给各位来公司参观的大能们留下深刻的印象。还好之前接触过HTML5,所以第一时间想到就是echarts,这个框架对于数据展示尤其图表类处理的还是非常强大和炫酷的。说干就干,首先到官网上把框架下下来,各组件Demo和API都熟悉下,对于你想要的东西和效果心里有个底,就开始动工了。官网地址是:https://echarts.apache.org,里面的Demo都是代码和效果图文并貌,还可以在线修改

    2022年10月12日
    0
  • es6模板字符串里用html标签,为ES6模板字符串计算标签函数[通俗易懂]

    es6模板字符串里用html标签,为ES6模板字符串计算标签函数[通俗易懂]Python部落(python.freelycode.com)组织翻译,禁止转载,欢迎转发。这篇博客描述了你可以通过函数为ES6模板字符串做些什么从而获取返回值。对于一篇针对模板字符串的介绍来说,标记的模板字符串和函数需要在《探索ES6》中查询模板字符串章节1.通过模板字符串获取返回值在JavaScript中获取一个值最普遍的方法就是在括号中加上参数。在ES6中,你可以通过模板字符串更多地获取返回…

    2022年8月21日
    7
  • Celer 跨链消息框架:开发和使用多链应用的全新模式

    Celer 跨链消息框架:开发和使用多链应用的全新模式Celer跨链消息框架(CelerInter-chainMessage)现已正式推出并上线测试网!

    2022年5月22日
    34
  • 模电笔记(按知识点整理版)

    模电笔记(按知识点整理版) 这是个人整理的一份个人模电学习笔记,文档中所有未标明的链接均为CSDN电子版笔记,对应章节的网课学习教程会在对应章节进行附录。模拟电子线路 这是一门很离谱的学科,因此即使是绪论我们也不能放过,以此来有助于我们更好地去了解这门学科究竟是什么以及应该怎么学习。一、基础知识 绪论与学习方法 常用半导体及其器件关键词:本征半导体PN结P型半导体与N型半导体基础知识对应网课: 绪论二、常用器件 对于模拟电路的学习归根结底就是对于器件的学习。坦白来讲就是玩管子。所有的管子我们都可以

    2022年6月20日
    35
  • js一篇汇总

    一.js的数据类型和变量JavaScript有六种数据类型。主要的类型有number、string、object以及Boolean类型,其他两种类型为null和undefined。

    2021年12月24日
    44

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号