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编程中使用Pillow来处理图像的基础教程
Nov 20 Python
Python中的字符串类型基本知识学习教程
Feb 04 Python
python编写分类决策树的代码
Dec 21 Python
Python文件读写保存操作的示例代码
Sep 14 Python
Python3 读、写Excel文件的操作方法
Oct 20 Python
Series和DataFrame使用简单入门
Nov 13 Python
python等差数列求和公式前 100 项的和实例
Feb 25 Python
Python 去除字符串中指定字符串
Mar 05 Python
Python使用requests xpath 并开启多线程爬取西刺代理ip实例
Mar 06 Python
浅谈selenium如何应对网页内容需要鼠标滚动加载的问题
Mar 14 Python
python如何实现图片压缩
Sep 11 Python
浅谈Selenium+Webdriver 常用的元素定位方式
Jan 13 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使用curl发送json格式数据实例
2013/12/17 PHP
迅速确定php多维数组的深度的方法
2014/01/07 PHP
php实现通用的从数据库表读取数据到数组的函数实例
2015/03/21 PHP
php检测url是否存在的方法
2015/04/14 PHP
php类中的$this,static,final,const,self这几个关键字使用方法
2015/12/14 PHP
深入解析PHP的Yii框架中的缓存功能
2016/03/29 PHP
PHP堆栈调试操作简单示例
2018/06/15 PHP
PHP+redis实现的购物车单例类示例
2019/02/02 PHP
php web环境和命令行环境下查找php.ini的位置
2019/07/17 PHP
javascript (用setTimeout而非setInterval)
2011/12/28 Javascript
jQuery cdn使用介绍
2013/05/08 Javascript
js 控制页面跳转的5种方法
2013/09/09 Javascript
js 数组操作之pop,push,unshift,splice,shift
2014/01/29 Javascript
js检测判断日期大于多少天的方法
2015/05/04 Javascript
基于JavaScript实现通用tab选项卡(通用性强)
2016/01/07 Javascript
Ionic2系列之使用DeepLinker实现指定页面URL
2016/11/21 Javascript
手把手教你使用vue-cli脚手架(图文解析)
2017/11/08 Javascript
微信小程序实现点赞、取消点赞功能
2018/11/02 Javascript
js实现3D旋转相册
2020/08/02 Javascript
Python实用日期时间处理方法汇总
2015/05/09 Python
简单介绍Python2.x版本中的cmp()方法的使用
2015/05/20 Python
Python实现螺旋矩阵的填充算法示例
2017/12/28 Python
Python 从相对路径下import的方法
2018/12/04 Python
Python+OpenCv制作证件图片生成器的操作方法
2019/08/21 Python
python爬虫 线程池创建并获取文件代码实例
2019/09/28 Python
浅谈python 调用open()打开文件时路径出错的原因
2020/06/05 Python
HTML5本地存储之IndexedDB
2017/06/16 HTML / CSS
HTML5实现移动端点击翻牌功能
2020/10/23 HTML / CSS
幼儿如何来做好自我评价
2013/11/05 职场文书
大学生求职推荐信
2013/11/27 职场文书
岗位说明书怎么写
2014/07/30 职场文书
学校查摆问题整改措施
2014/09/28 职场文书
幼儿教师2014年度工作总结
2014/12/16 职场文书
在校证明模板
2015/06/17 职场文书
2019年大学生职业生涯规划书最新范文
2019/03/25 职场文书
JS实现页面炫酷的时钟特效示例
2022/08/14 Javascript