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判断IP地址合法性的方法实例
Mar 13 Python
python获取标准北京时间的方法
Mar 24 Python
简单的Python的curses库使用教程
Apr 11 Python
Python聚类算法之凝聚层次聚类实例分析
Nov 20 Python
基于Python实现一个简单的银行转账操作
Mar 06 Python
Python面向对象编程基础解析(一)
Oct 26 Python
Python标准库inspect的具体使用方法
Dec 06 Python
python中自带的三个装饰器的实现
Nov 08 Python
pandas数据选取:df[] df.loc[] df.iloc[] df.ix[] df.at[] df.iat[]
Apr 24 Python
学python需要去培训机构吗
Jul 01 Python
Python安装并操作redis实现流程详解
Oct 13 Python
python爬取企查查企业信息之selenium自动模拟登录企查查
Apr 08 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把大写命名转换成下划线分割命名
2015/04/27 PHP
前端必学之PHP语法基础
2016/01/01 PHP
PHP微信支付开发实例
2016/06/22 PHP
JavaScript Eval 函数使用
2010/03/23 Javascript
js判断IE浏览器版本过低示例代码
2013/11/22 Javascript
easyui datagrid 键盘上下控制选中行示例
2014/03/31 Javascript
jQuery on()方法示例及jquery on()方法的优点
2015/08/27 Javascript
一款简单的jQuery图片标注效果附源码下载
2016/03/22 Javascript
BootStrap的table表头固定tbody滚动的实例代码
2016/08/24 Javascript
JSON 对象未定义错误的解决方法
2016/09/29 Javascript
vue cli webpack中使用sass的方法
2018/02/24 Javascript
使用Object.defineProperty如何巧妙找到修改某个变量的准确代码位置
2018/11/02 Javascript
JavaScript实现省市区三级联动
2020/02/13 Javascript
小程序跳转到的H5页面再跳转回跳小程序的方法
2020/03/06 Javascript
[00:43]TI7不朽珍藏III——幽鬼不朽展示
2017/07/15 DOTA
Python安装lz4-0.10.1遇到的坑
2018/05/20 Python
python+splinter实现12306网站刷票并自动购票流程
2018/09/25 Python
使用python socket分发大文件的实现方法
2019/07/08 Python
浅谈Django中view对数据库的调用方法
2019/07/18 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
用Python 执行cmd命令
2020/12/18 Python
浅析HTML5的WebSocket与服务器推送事件
2016/02/19 HTML / CSS
英国鞋类及配饰零售商:Kurt Geiger
2017/02/04 全球购物
Roxy俄罗斯官方网站:冲浪和滑雪板的一切
2020/06/20 全球购物
介绍一下sql server的安全性
2014/08/10 面试题
涉外经济法专业毕业生推荐信
2013/11/24 职场文书
秋季运动会通讯稿
2014/01/24 职场文书
行政部经理助理岗位职责
2014/06/15 职场文书
银行柜员与客户起冲突检讨书
2014/09/27 职场文书
教师个人年度总结
2015/02/11 职场文书
学校中秋节活动总结
2015/03/23 职场文书
销售经理岗位职责范本
2015/04/02 职场文书
兴趣班停课通知
2015/04/24 职场文书
先进党支部事迹材料2016
2016/02/26 职场文书
如何书写民事调解协议书?
2019/06/25 职场文书
ECharts transform数据转换和dataZoom在项目中使用
2022/12/24 Javascript