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脚本实现集群检测和管理功能
Mar 06 Python
python数据抓取分析的示例代码(python + mongodb)
Dec 25 Python
Python第三方Window模块文件的几种安装方法
Nov 22 Python
Python3实现的旋转矩阵图像算法示例
Apr 03 Python
python远程连接MySQL数据库
Apr 19 Python
python用quad、dblquad实现一维二维积分的实例详解
Nov 20 Python
django 框架实现的用户注册、登录、退出功能示例
Nov 28 Python
关于Python 中的时间处理包datetime和arrow的方法详解
Mar 19 Python
Python os库常用操作代码汇总
Nov 03 Python
python使用matplotlib的savefig保存时图片保存不完整的问题
Jan 08 Python
python 提取html文本的方法
May 20 Python
使用python绘制分组对比柱状图
Apr 21 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错误提示failed to open stream: HTTP request failed!的完美解决方法
2011/06/06 PHP
PHP curl 并发最佳实践代码分享
2012/09/05 PHP
php判断一个数组是否为有序的方法
2015/03/27 PHP
php动态读取数据清除最右边距的方法
2017/04/12 PHP
Laravel 实现数据软删除功能
2019/08/21 PHP
提高代码性能技巧谈—以创建千行表格为例
2006/07/01 Javascript
用js实现的检测浏览器和系统的函数
2009/04/09 Javascript
JavaScript经典效果集锦
2010/07/06 Javascript
js函数调用的方式
2014/05/06 Javascript
jQuery判断复选框是否勾选的原理及示例
2014/05/21 Javascript
js和jquery中循环的退出和继续学习记录
2014/09/06 Javascript
jQuery实现带滚动线条导航效果的方法
2015/01/30 Javascript
jQuery简单tab切换效果实现方法
2015/04/08 Javascript
自定义Angular指令与jQuery实现的Bootstrap风格数据双向绑定的单选与多选下拉框
2015/12/12 Javascript
基于Vue2.0的分页组件
2017/03/16 Javascript
bootstrap fileinput实现文件上传功能
2017/08/23 Javascript
node中modules.exports与exports导出的区别
2018/06/08 Javascript
jQuery实现的点击按钮改变样式功能示例
2018/07/21 jQuery
Vue.js 中的 v-model 指令及绑定表单元素的方法
2018/12/03 Javascript
vue store之状态管理模式的详细介绍
2019/06/13 Javascript
解决layui-open关闭自身窗口的问题
2019/09/10 Javascript
js实现文章目录索引导航(table of content)
2020/05/10 Javascript
python实现从一组颜色中找出与给定颜色最接近颜色的方法
2015/03/19 Python
Python中比较特别的除法运算和幂运算介绍
2015/04/05 Python
python:pandas合并csv文件的方法(图书数据集成)
2018/04/12 Python
基于Python实现大文件分割和命名脚本过程解析
2019/09/29 Python
python 读txt文件,按‘,’分割每行数据操作
2020/07/05 Python
pandas数据分组groupby()和统计函数agg()的使用
2021/03/04 Python
html5 实现客户端验证上传文件的大小(简单实例)
2016/05/15 HTML / CSS
Kate Spade美国官网:纽约新兴时尚品牌,以包包闻名于世
2017/11/09 全球购物
Brora官网:英国领先的羊绒服装品牌
2019/08/28 全球购物
临床医学大学生求职信
2013/09/28 职场文书
建筑横幅标语
2014/10/09 职场文书
看雷锋电影观后感
2015/06/10 职场文书
幼儿园教师培训心得体会
2016/01/21 职场文书
详解Python requests模块
2021/06/21 Python