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 27 Python
开始着手第一个Django项目
Jul 15 Python
使用Python编写一个最基础的代码解释器的要点解析
Jul 12 Python
python实现批量修改文件名代码
Sep 10 Python
python中退出多层循环的方法
Nov 27 Python
在unittest中使用 logging 模块记录测试数据的方法
Nov 30 Python
Python参数解析模块sys、getopt、argparse使用与对比分析
Apr 02 Python
24式加速你的Python(小结)
Jun 13 Python
python通过TimedRotatingFileHandler按时间切割日志
Jul 17 Python
tensorflow 获取checkpoint中的变量列表实例
Feb 11 Python
idea2020手动安装python插件的实现方法
Jul 17 Python
Python+Xlwings 删除Excel的行和列
Dec 19 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结合Vue实现滚动底部加载效果
2017/12/17 PHP
php删除一个路径下的所有文件夹和文件的方法
2018/02/07 PHP
Nigma vs Alliance BO5 第一场2.14
2021/03/10 DOTA
JavaScript 继承详解(四)
2009/07/13 Javascript
javascript深入理解js闭包
2010/07/03 Javascript
js操作table示例(个人心得)
2013/11/29 Javascript
javascript贪吃蛇完整版(源码)
2013/12/09 Javascript
js仿百度贴吧验证码特效实例代码
2014/01/16 Javascript
JavaScript中用字面量创建对象介绍
2014/12/31 Javascript
JS输入用户名自动显示邮箱后缀列表的方法
2015/01/27 Javascript
浅析javascript的return语句
2015/12/15 Javascript
动态创建按钮的JavaScript代码
2016/01/29 Javascript
关于JS 预解释的相关理解
2016/06/28 Javascript
JS拉起或下载app的实现代码
2017/02/22 Javascript
分分钟玩转Vue.js组件(二)
2017/03/01 Javascript
ES6新特性六:promise对象实例详解
2017/04/21 Javascript
详解vue2.0 使用动态组件实现 Tab 标签页切换效果(vue-cli)
2017/08/30 Javascript
html+jQuery实现拖动滑块图片拼图验证码插件【移动端适用】
2019/09/10 jQuery
js实现课堂随机点名系统
2019/11/21 Javascript
vue请求数据的三种方式
2020/03/04 Javascript
Python3 正在毁灭 Python的原因分析
2014/11/28 Python
Scrapy-Redis结合POST请求获取数据的方法示例
2019/05/07 Python
Python Pickle 实现在同一个文件中序列化多个对象
2019/12/30 Python
python扫描线填充算法详解
2020/02/19 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Python如何对XML 解析
2020/06/28 Python
django创建css文件夹的具体方法
2020/07/31 Python
html5开发之viewport使用
2013/10/17 HTML / CSS
internal修饰符起什么作用
2013/12/16 面试题
什么是Linux虚拟文件系统VFS
2012/01/31 面试题
《梅兰芳学艺》教学反思
2014/02/24 职场文书
人事经理岗位职责范本
2014/08/04 职场文书
表扬稿表扬信的格式及范文
2019/06/24 职场文书
Jupyter notebook 输出部分显示不全的解决方案
2021/04/24 Python
Python django中如何使用restful框架
2021/06/23 Python
Qt数据库应用之实现图片转pdf
2022/06/01 Java/Android