Python读写压缩文件的方法


Posted in Python onJuly 30, 2020

问题

你想读写一个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 模块可以工作在许多类文件对象上,比如套接字,管道和内存中文件等。

以上就是Python读写压缩文件的方法的详细内容,更多关于Python 读写压缩文件的资料请关注三水点靠木其它相关文章!

Python 相关文章推荐
Python实现抓取网页并且解析的实例
Sep 20 Python
python使用PIL模块实现给图片打水印的方法
May 22 Python
Python3.5面向对象程序设计之类的继承和多态详解
Apr 24 Python
python抓取需要扫微信登陆页面
Apr 29 Python
使用OpCode绕过Python沙箱的方法详解
Sep 03 Python
Python 实现OpenCV格式和PIL.Image格式互转
Jan 09 Python
python实现对变位词的判断方法
Apr 05 Python
python中round函数如何使用
Jun 19 Python
python怎么调用自己的函数
Jul 01 Python
拿来就用!Python批量合并PDF的示例代码
Aug 10 Python
Python深度学习之Pytorch初步使用
May 20 Python
Python TypeError: ‘float‘ object is not subscriptable错误解决
Dec 24 Python
Python3爬虫里关于代理的设置总结
Jul 30 #Python
Python 如何创建一个简单的REST接口
Jul 30 #Python
Python3爬虫里关于识别微博宫格验证码的知识点详解
Jul 30 #Python
Python3爬虫关于识别点触点选验证码的实例讲解
Jul 30 #Python
Python3爬虫关于识别检验滑动验证码的实例
Jul 30 #Python
Python3爬虫中识别图形验证码的实例讲解
Jul 30 #Python
Python3以GitHub为例来实现模拟登录和爬取的实例讲解
Jul 30 #Python
You might like
php数据库抽象层 PDO
2011/05/07 PHP
php5.3 不支持 session_register() 此函数已启用的解决方法
2013/11/12 PHP
PHP函数extension_loaded()用法实例
2015/01/19 PHP
PHP速成大法
2015/01/30 PHP
PHP易混淆知识整理笔记
2015/09/24 PHP
php实现文件预览功能
2017/05/23 PHP
php常用的工具开发整理
2019/09/26 PHP
javascript判断单选框或复选框是否选中方法集锦
2007/04/04 Javascript
nodejs的require模块(文件模块/核心模块)及路径介绍
2013/01/14 NodeJs
影响jQuery使用的14个方面
2014/09/01 Javascript
js实现顶部可折叠的菜单工具栏效果实例
2015/05/09 Javascript
js拖拽的原型声明和用法总结
2016/04/04 Javascript
浅谈js常用内置方法和对象
2016/09/24 Javascript
Javascript实现倒计时时差效果
2017/05/18 Javascript
nodejs socket实现的服务端和客户端功能示例
2017/06/02 NodeJs
Angular 1.x个人使用的经验小结
2017/07/19 Javascript
Node解决简单重复问题系列之Excel内容的获取
2018/01/02 Javascript
js打开word文档预览操作示例【不是下载】
2019/05/23 Javascript
独立部署小程序基于nodejs的服务器过程详解
2019/06/24 NodeJs
使用webpack/gulp构建TypeScript项目的方法示例
2019/12/18 Javascript
JavaScript实现跟随鼠标移动的盒子
2021/01/28 Javascript
使用python对多个txt文件中的数据进行筛选的方法
2019/07/10 Python
pandas中遍历dataframe的每一个元素的实现
2019/10/23 Python
pytorch中torch.max和Tensor.view函数用法详解
2020/01/03 Python
Python如何执行精确的浮点数运算
2020/07/31 Python
Penhaligon’s英国官网:成立于1870年的英国香水制造商
2021/02/18 全球购物
高级电工工作职责
2013/11/21 职场文书
医学专业毕业生个人求职信
2013/12/25 职场文书
环保公益广告语
2014/03/13 职场文书
贯彻学习两会心得体会范文
2014/03/17 职场文书
委托代理人授权委托书范本
2014/09/24 职场文书
汽车转让协议书
2015/01/29 职场文书
中学音乐课教学反思
2016/02/18 职场文书
2019年作为一名实习生的述职报告
2019/09/29 职场文书
Axios取消重复请求的方法实例详解
2021/06/15 Javascript
灵能百分百第三季什么时候来?
2022/03/15 日漫