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 相关文章推荐
使用cx_freeze把python打包exe示例
Jan 24 Python
python模拟鼠标拖动操作的方法
Mar 11 Python
低版本中Python除法运算小技巧
Apr 05 Python
python语言使用技巧分享
May 31 Python
分析Python中解析构建数据知识
Jan 20 Python
CentOS7下安装python3.6.8的教程详解
Jan 03 Python
Python使用扩展库pywin32实现批量文档打印实例
Apr 09 Python
Python3爬虫中关于Ajax分析方法的总结
Jul 10 Python
python 如何利用argparse解析命令行参数
Sep 11 Python
详解Django中的FBV和CBV对比分析
Mar 01 Python
Python 游戏大作炫酷机甲闯关游戏爆肝数千行代码实现案例进阶
Oct 16 Python
如何利用Python实现n*n螺旋矩阵
Jan 18 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
PHPMailer安装方法及简单实例
2008/11/25 PHP
安装ImageMagick出现error while loading shared libraries的解决方法
2014/09/23 PHP
Jquery从头学起第四讲 jquery入门教程
2010/08/01 Javascript
javascript对数组的常用操作代码 数组方法总汇
2011/01/27 Javascript
Js放到HTML文件中的哪个位置有什么区别
2013/08/21 Javascript
jq实现酷炫的鼠标经过图片翻滚效果
2014/03/12 Javascript
基于JavaScript代码实现pc与手机之间的跳转
2015/12/23 Javascript
深入理解javascript中concat方法
2016/12/12 Javascript
vuejs响应用户事件(如点击事件)
2017/03/14 Javascript
详解从angular-cli:1.0.0-beta.28.3升级到@angular/cli:1.0.0
2017/05/22 Javascript
在vue-cli脚手架中配置一个vue-router前端路由
2017/07/03 Javascript
JavaScript实现数组全排列、去重及求最大值算法示例
2018/07/30 Javascript
vuejs 制作背景淡入淡出切换动画的实例
2018/09/01 Javascript
js中this的指向问题归纳总结
2018/11/28 Javascript
vueScroll实现移动端下拉刷新、上拉加载
2019/03/22 Javascript
微信小程序网络层封装的实现(promise, 登录锁)
2019/05/08 Javascript
Vue分页效果与购物车功能
2019/12/13 Javascript
Vue.js中的高级面试题及答案
2020/01/13 Javascript
vue实现淘宝购物车功能
2020/04/20 Javascript
python获取元素在数组中索引号的方法
2015/07/15 Python
带你认识Django
2019/01/15 Python
python+selenium实现自动化百度搜索关键词
2019/06/03 Python
python-web根据元素属性进行定位的方法
2019/12/13 Python
django xadmin action兼容自定义model权限教程
2020/03/30 Python
使用Python将Exception异常错误堆栈信息写入日志文件
2020/04/08 Python
Python爬虫之爬取淘女郎照片示例详解
2020/07/28 Python
德国在线香料制造商:Gewürzland
2020/03/10 全球购物
经典c++面试题五
2014/12/17 面试题
物流管理毕业生自荐信
2013/10/24 职场文书
求职简历自荐信
2014/06/18 职场文书
家长会欢迎标语
2014/06/24 职场文书
设备技术员岗位职责
2015/04/11 职场文书
2019运动会广播加油稿汇总
2019/08/21 职场文书
SQL Server连接查询的实用教程
2021/04/07 SQL Server
uniapp开发小程序的经验总结
2021/04/08 Javascript
JS前端监控采集用户行为的N种姿势
2022/07/23 Javascript