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 20 Python
在Docker上开始部署Python应用的教程
Apr 17 Python
Python Paramiko模块的安装与使用详解
Nov 18 Python
python实现决策树
Dec 21 Python
解决Django数据库makemigrations有变化但是migrate时未变动问题
May 30 Python
numpy添加新的维度:newaxis的方法
Aug 02 Python
Pandas统计重复的列里面的值方法
Jan 30 Python
python time.sleep()是睡眠线程还是进程
Jul 09 Python
wxPython实现列表增删改查功能
Nov 19 Python
python函数不定长参数使用方法解析
Dec 14 Python
Python 实现将numpy中的nan和inf,nan替换成对应的均值
Jun 08 Python
python字符串拼接.join()和拆分.split()详解
Nov 23 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 正则匹配函数体
2009/08/25 PHP
处理php自动反斜杠的函数代码
2010/01/05 PHP
linux iconv方法的使用
2011/10/01 PHP
php实现水印文字和缩略图的方法示例
2016/12/29 PHP
Js实现当前点击a标签变色突出显示其他a标签回复原色
2013/11/27 Javascript
为指定的元素添加遮罩层的示例代码
2014/01/15 Javascript
javascript获取dom的下一个节点方法
2014/09/05 Javascript
z-blog SyntaxHighlighter 长代码无法换行解决办法(jquery)
2014/11/16 Javascript
JavaScript对表格或元素按文本,数字或日期排序的方法
2015/05/26 Javascript
JS实现可点击展开与关闭的左侧广告代码
2015/09/02 Javascript
AngularJS表单和输入验证实例
2016/11/02 Javascript
深究AngularJS中ng-drag、ng-drop的用法
2017/06/12 Javascript
JS库 Highlightjs 添加代码行号的实现代码
2017/09/13 Javascript
实现div内部滚动条滚动到底部和顶部的代码
2017/11/15 Javascript
jquery实现直播视频弹幕效果
2020/02/25 jQuery
AI小程序之语音听写来了,十分钟掌握百度大脑语音听写全攻略
2020/03/13 Javascript
[01:10]DOTA2次级职业联赛 - Fly战队宣传片
2014/12/01 DOTA
[04:59]DOTA2-DPC中国联赛 正赛 Ehome vs iG 选手采访
2021/03/11 DOTA
CentOS 7下Python 2.7升级至Python3.6.1的实战教程
2017/07/06 Python
python 输出上个月的月末日期实例
2018/04/11 Python
Python Requests库基本用法示例
2018/08/20 Python
python 整数越界问题详解
2019/06/27 Python
使用pytorch完成kaggle猫狗图像识别方式
2020/01/10 Python
Pytorch 使用 nii数据做输入数据的操作
2020/05/26 Python
专注澳大利亚特产和新西兰特产的澳洲中文网:0061澳洲制造
2019/03/24 全球购物
美国医生配方营养补充剂供应商:Healthy Directions
2019/07/10 全球购物
HomeAway英国:全球领先的度假租赁在线市场
2020/02/03 全球购物
英国领先的在线鱼贩:The Fish Society
2020/08/12 全球购物
大学生饮食连锁店创业计划书
2014/01/17 职场文书
土建专业大学生自荐信范文
2014/04/09 职场文书
共产党员岗位承诺书
2014/05/29 职场文书
知识竞赛拉拉队口号
2014/06/16 职场文书
多媒体教室标语
2014/06/26 职场文书
党员理论学习心得体会
2016/01/21 职场文书
Java SSH 秘钥连接mysql数据库的方法
2021/06/28 Java/Android
CSS SandBox应用场景及常见问题
2022/06/25 HTML / CSS