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生成指定尺寸缩略图的示例
May 07 Python
Python sys.argv用法实例
May 28 Python
Python的Scrapy爬虫框架简单学习笔记
Jan 20 Python
浅谈Python中的作用域规则和闭包
Mar 20 Python
Python设计模式之建造者模式实例详解
Jan 17 Python
Django为窗体加上防机器人的验证码功能过程解析
Aug 14 Python
使用PyQt的QLabel组件实现选定目标框功能的方法示例
May 19 Python
Python过滤掉numpy.array中非nan数据实例
Jun 08 Python
Python常用库Numpy进行矩阵运算详解
Jul 21 Python
python如何设置静态变量
Sep 07 Python
python实现数据结构中双向循环链表操作的示例
Oct 09 Python
关于python中remove的一些坑小结
Jan 04 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
Optimizer与Debugger兼容性问题的解决方法
2008/12/01 PHP
Windows下XDebug 手工配置与使用说明
2010/07/11 PHP
PHP中通过语义URL防止网站被攻击的方法分享
2011/09/08 PHP
使用php+Ajax实现唯一校验实现代码[简单应用]
2011/11/29 PHP
php中serialize序列化与json性能测试的示例分析
2013/04/27 PHP
IIS安装Apache伪静态插件的具体操作图文
2013/07/01 PHP
php检测网页是否被百度收录的函数代码
2013/10/09 PHP
php数组指针操作详解
2017/02/14 PHP
javascript document.referrer 用法
2009/04/30 Javascript
jquery创建一个新的节点对象(自定义结构/内容)的好方法
2013/01/21 Javascript
Javascript表单验证要注意的事项
2014/09/29 Javascript
js实现的鼠标滚轮滚动切换页面效果(类似360默认页面滚动切换效果)
2016/01/27 Javascript
JavaScript编码风格指南(中文版)
2016/08/26 Javascript
bootstrap datetimepicker2.3.11时间插件使用
2016/11/19 Javascript
Bootbox将后台JSON数据填充Form表单的实例代码
2018/09/10 Javascript
如何解决vue2.0下IE浏览器白屏问题
2018/09/13 Javascript
windows实现npm和cnpm安装步骤
2019/10/24 Javascript
Javascript组合继承方法代码实例解析
2020/04/02 Javascript
浅谈vue生命周期共有几个阶段?分别是什么?
2020/08/07 Javascript
用Python程序抓取网页的HTML信息的一个小实例
2015/05/02 Python
Python简单定义与使用二叉树示例
2018/05/11 Python
Python实现的redis分布式锁功能示例
2018/05/29 Python
三步实现Django Paginator分页的方法
2019/06/11 Python
matlab灰度图像调整及imadjust函数的用法详解
2020/02/27 Python
Notino意大利:购买香水和化妆品
2018/11/14 全球购物
将一个数的从第5位开始的7个数取出,其余位置0
2016/05/26 面试题
中学实习教师自我鉴定
2013/12/12 职场文书
班组长工作职责
2013/12/25 职场文书
幼儿园教师辞职信
2014/01/18 职场文书
创业计划实施的7大步骤
2014/02/05 职场文书
进步之星获奖感言
2014/02/22 职场文书
《囚绿记》教学反思
2014/03/01 职场文书
2014年化验室工作总结
2014/11/21 职场文书
物业接待员岗位职责
2015/04/15 职场文书
2015年工程部工作总结
2015/04/30 职场文书
使用refresh_token实现无感刷新页面
2022/04/26 Javascript