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开发之文件操作用法实例
Nov 13 Python
win10系统中安装scrapy-1.1
Jul 03 Python
python爬虫入门教程--正则表达式完全指南(五)
May 25 Python
python逆向入门教程
Jan 15 Python
python将回车作为输入内容的实例
Jun 23 Python
python对list中的每个元素进行某种操作的方法
Jun 29 Python
python实现linux下抓包并存库功能
Jul 18 Python
pytorch对梯度进行可视化进行梯度检查教程
Feb 04 Python
Keras load_model 导入错误的解决方式
Jun 09 Python
简单了解Python字典copy与赋值的区别
Sep 16 Python
Python turtle编写简单的球类小游戏
Mar 31 Python
Python 使用 Frame tkraise() 方法在 Tkinter 应用程序中的Frame之间切换
Apr 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 simple_html_dom.php+正则 采集文章代码
2009/12/24 PHP
Laravel 5框架学习之Eloquent (laravel 的ORM)
2015/04/08 PHP
详解Yii2高级版引入bootstrap.js的一个办法
2017/03/21 PHP
PHP实现动态添加XML中数据的方法
2018/03/30 PHP
phpstudy隐藏index.php的方法
2020/09/21 PHP
用js写了一个类似php的print_r输出换行功能
2013/02/18 Javascript
浏览器打开层自动缓慢展开收缩实例代码
2013/07/04 Javascript
jquery win 7透明弹出层效果的简单代码
2013/08/06 Javascript
有关JavaScript中call()和apply() 的一些理解
2016/05/20 Javascript
Javascript highcharts 饼图显示数量和百分比实例代码
2016/12/06 Javascript
Jquery中.bind()、.live()、.delegate()和.on()之间的区别详解
2017/08/01 jQuery
JavaScript引用类型Object常见用法实例分析
2018/08/08 Javascript
jQuery实现的简单手风琴效果示例
2018/08/29 jQuery
详解Ant Design of React的安装和使用方法
2018/12/27 Javascript
koa大型web项目中使用路由装饰器的方法示例
2019/04/02 Javascript
Vuejs学习笔记之使用指令v-model完成表单的数据双向绑定
2019/04/29 Javascript
Vue.js计算机属性computed和methods方法详解
2019/10/12 Javascript
[03:06]V社市场总监Dota2项目负责人Erik专访:希望更多中国玩家加入DOTA2
2014/07/11 DOTA
Python实现的石头剪子布代码分享
2014/08/22 Python
Python运算符重载用法实例分析
2015/06/01 Python
python搭建虚拟环境的步骤详解
2016/09/27 Python
利用Python破解验证码实例详解
2016/12/08 Python
python实现批量视频分帧、保存视频帧
2019/05/31 Python
Python测试模块doctest使用解析
2019/08/10 Python
python适合做数据挖掘吗
2020/06/16 Python
Python 调用 ES、Solr、Phoenix的示例代码
2020/11/23 Python
Html5页面点击遮罩层背景关闭遮罩层
2020/11/30 HTML / CSS
班主任班级寄语大全
2014/04/04 职场文书
2014年新生军训方案
2014/05/01 职场文书
领导干部贪图享乐整改措施
2014/09/21 职场文书
通讯稿格式及范文
2015/07/22 职场文书
2016新教师培训心得体会范文
2016/01/08 职场文书
准备去美国留学,那么大学申请文书应该怎么写?
2019/08/12 职场文书
使用GO语言实现Mysql数据库CURD的简单示例
2021/08/07 Golang
在CSS中使用when/else的方法
2022/01/18 HTML / CSS
什么是clearfix (一文搞清楚css清除浮动clearfix)
2023/05/21 HTML / CSS