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动态加载包的方法小结
Apr 18 Python
详解Python使用tensorflow入门指南
Feb 09 Python
解决pandas无法在pycharm中使用plot()方法显示图像的问题
May 24 Python
opencv python 2D直方图的示例代码
Jul 20 Python
对numpy中的transpose和swapaxes函数详解
Aug 02 Python
使用Python操作FTP实现上传和下载的方法
Apr 01 Python
Python基础教程之if判断,while循环,循环嵌套
Apr 25 Python
Python实现图片识别加翻译功能
Dec 26 Python
keras topN显示,自编写代码案例
Jul 03 Python
numpy数据类型dtype转换实现
Apr 24 Python
Python机器学习三大件之一numpy
May 10 Python
python热力图实现的完整实例
Jun 25 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安全性需要注意的几点事项
2014/07/17 PHP
PHP制作图形验证码代码分享
2014/10/23 PHP
Symfony2在Nginx下的配置方法图文教程
2016/02/04 PHP
如何在centos8自定义目录安装php7.3
2019/11/28 PHP
javascript string字符串优化问题
2011/07/31 Javascript
浅谈关于JavaScript的语言特性分析
2013/04/11 Javascript
jquery中邮箱地址 URL网站地址正则验证实例代码
2013/09/15 Javascript
js+html5实现canvas绘制镂空字体文本的方法
2015/06/05 Javascript
javascript跨域的方法汇总
2015/10/23 Javascript
理解JavaScript原型链
2016/10/25 Javascript
nodeJs链接Mysql做增删改查的简单操作
2017/02/04 NodeJs
MUI 解决动态列表页图片懒加载再次加载不成功的bug问题
2017/04/13 Javascript
js实现图片懒加载效果
2017/07/17 Javascript
vue2.5.2使用http请求获取静态json数据的实例代码
2018/02/27 Javascript
create-react-app修改为多页面支持的方法
2018/05/17 Javascript
vue.js使用v-if实现显示与隐藏功能示例
2018/07/06 Javascript
vue的列表交错过渡实现代码示例
2019/05/05 Javascript
解决Vue调用springboot接口403跨域问题
2019/09/02 Javascript
如何利用vue实现波谱拟合详解
2020/11/05 Javascript
js实现纯前端压缩图片
2020/11/16 Javascript
基于vue-simple-uploader封装文件分片上传、秒传及断点续传的全局上传插件功能
2021/02/23 Vue.js
python简单实现基数排序算法
2015/05/16 Python
Python中内置的日志模块logging用法详解
2016/07/12 Python
用python结合jieba和wordcloud实现词云效果
2017/09/05 Python
Python使用 Beanstalkd 做异步任务处理的方法
2018/04/24 Python
PyTorch学习笔记之回归实战
2018/05/28 Python
numpy返回array中元素的index方法
2018/06/27 Python
python basemap 画出经纬度并标定的实例
2019/07/09 Python
OpenCV哈里斯(Harris)角点检测的实现
2020/01/15 Python
如何查看Django ORM执行的SQL语句的实现
2020/04/20 Python
Python参数传递对象的引用原理解析
2020/05/22 Python
倩碧美国官网:Clinique美国
2016/07/20 全球购物
西班牙香水和化妆品网上商店:Douglas
2017/10/29 全球购物
计算 s=(x*y)1/2,用两个宏定义来实现
2016/08/11 面试题
超市活动计划书
2014/04/24 职场文书
药店采购员岗位职责
2014/09/30 职场文书