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 14 Python
Python向MySQL批量插数据的实例讲解
Mar 31 Python
详解Python如何生成词云的方法
Jun 01 Python
python爬取cnvd漏洞库信息的实例
Feb 14 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
Python 继承,重写,super()调用父类方法操作示例
Sep 29 Python
Python 实现加密过的PDF文件转WORD格式
Feb 04 Python
Python如何对齐字符串
Jul 30 Python
Python中threading库实现线程锁与释放锁
May 17 Python
Django实现翻页的示例代码
May 24 Python
Python NumPy灰度图像的压缩原理讲解
Aug 04 Python
用Python实现屏幕截图详解
Jan 22 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中判断一个字符串包含另一个字符串的方法
2007/03/19 PHP
php 地区分类排序算法
2013/07/01 PHP
PHP实现获取客户端IP并获取IP信息
2015/03/17 PHP
PHP实现获取某个月份周次信息的方法
2015/08/11 PHP
详解 PHP加密解密字符串函数附源码下载
2015/12/18 PHP
php实现批量删除挂马文件及批量替换页面内容完整实例
2016/07/08 PHP
php实现socket推送技术的示例
2017/12/20 PHP
基于Jquery实现键盘按键监听
2014/05/11 Javascript
JS弹出可拖拽可关闭的div层完整实例
2015/02/13 Javascript
深入理解jQuery中的事件冒泡
2016/05/24 Javascript
JS查找字符串中出现最多的字符及个数统计
2017/02/04 Javascript
原生JS+Canvas实现五子棋游戏
2020/05/28 Javascript
vue devtools的安装与使用教程
2018/08/08 Javascript
JS实现简易留言板特效
2019/12/23 Javascript
vue实现移动端H5数字键盘组件使用详解
2020/08/25 Javascript
详解JavaScript中分解数字的三种方法
2021/01/05 Javascript
[43:51]2018DOTA2亚洲邀请赛3月30日 小组赛B组 EG VS Secret
2018/03/31 DOTA
用Python编程实现语音控制电脑
2014/04/01 Python
python实现颜色rgb和hex相互转换的函数
2015/03/19 Python
Python进阶学习之特殊方法实例详析
2017/12/01 Python
网红编程语言Python将纳入高考你怎么看?
2018/06/07 Python
查找python项目依赖并生成requirements.txt的方法
2018/07/10 Python
python2使用bs4爬取腾讯社招过程解析
2019/08/14 Python
Python循环实现n的全排列功能
2019/09/16 Python
通过实例学习Python Excel操作
2020/01/06 Python
python 的numpy库中的mean()函数用法介绍
2020/03/03 Python
Keras自定义实现带masking的meanpooling层方式
2020/06/16 Python
读取nii或nii.gz文件中的信息即输出图像操作
2020/07/01 Python
使用scrapy ImagesPipeline爬取图片资源的示例代码
2020/09/28 Python
美国休闲服装品牌:J.Crew Factory
2017/03/04 全球购物
值类型与引用类型有什么不同?请举例说明?并分别列举几种相应的数据类型
2015/10/24 面试题
商场租赁意向书
2014/07/30 职场文书
小学生国庆节演讲稿
2014/09/05 职场文书
祝寿主持词
2015/07/02 职场文书
详解PHP服务器如何在有限的资源里最大提升并发能力
2021/05/25 PHP
Android自定义ScrollView实现阻尼回弹
2022/04/01 Java/Android