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 相关文章推荐
python3访问sina首页中文的处理方法
Feb 24 Python
Python标准异常和异常处理详解
Feb 02 Python
Python随机生成带特殊字符的密码
Mar 02 Python
深入浅析python继承问题
May 29 Python
Python使用当前时间、随机数产生一个唯一数字的方法
Sep 18 Python
用xpath获取指定标签下的所有text的实例
Jan 02 Python
Python eval的常见错误封装及利用原理详解
Mar 26 Python
详解pytorch 0.4.0迁移指南
Jun 16 Python
python实现批量nii文件转换为png图像
Jul 18 Python
python pillow模块使用方法详解
Aug 30 Python
python pandas移动窗口函数rolling的用法
Feb 29 Python
通过代码简单了解django model序列化作用
Nov 12 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
3.从实例开始
2006/10/09 PHP
用文本文件制作留言板提示(下)
2006/10/09 PHP
网络资源
2006/10/09 PHP
php中判断文件空目录是否有读写权限的函数代码
2012/08/07 PHP
ubuntu下编译安装xcache for php5.3 的具体操作步骤
2013/06/18 PHP
详解php反序列化
2020/06/10 PHP
ExtJS4 组件化编程,动态加载,面向对象,Direct
2011/05/12 Javascript
什么是Node.js?Node.js详细介绍
2014/06/01 Javascript
JavaScript中property和attribute的区别详细介绍
2015/03/03 Javascript
详解AngularJS过滤器的使用
2016/03/11 Javascript
BootStrap与Select2使用小结
2017/02/17 Javascript
JavaScript中创建对象的7种模式详解
2017/02/21 Javascript
mint-ui的search组件在键盘显示搜索按钮的实现方法
2017/10/27 Javascript
javaScript中的空值和假值
2017/12/18 Javascript
JavaScript多线程运行库Nexus.js详解
2017/12/22 Javascript
Node实战之不同环境下配置文件使用教程
2018/01/02 Javascript
使用watch在微信小程序中实现全局状态共享
2019/06/03 Javascript
JS数组扁平化(flat)方法总结详解
2019/06/24 Javascript
vue 使用 canvas 实现手写电子签名
2020/03/06 Javascript
[01:04:39]OG vs Mineski 2018国际邀请赛小组赛BO2 第二场 8.17
2018/08/18 DOTA
[01:12:40]DOTA2-DPC中国联赛 正赛 DLG vs XG BO3 第三场 1月25日
2021/03/11 DOTA
python 判断一个进程是否存在
2009/04/09 Python
python实现机器人行走效果
2018/01/29 Python
基于Python列表解析(列表推导式)
2018/06/23 Python
Flask框架响应、调度方法和蓝图操作实例分析
2018/07/24 Python
Python 获取numpy.array索引值的实例
2019/12/06 Python
python 比较字典value的最大值的几种方法
2020/04/17 Python
python MD5加密的示例
2020/10/19 Python
使用CSS3实现input多选框自定义样式的方法示例
2019/07/19 HTML / CSS
html5使用html2canvas实现浏览器截图的示例
2017/08/31 HTML / CSS
英国婴儿和儿童服装网站:Vertbaudet
2018/04/02 全球购物
生产车间主任的个人自我鉴定
2013/10/25 职场文书
乡镇信息公开实施方案
2014/03/23 职场文书
外语专业毕业生自荐信
2014/04/14 职场文书
浅谈redis五大数据结构和使用场景
2021/04/12 Redis
纯CSS实现一个简单步骤条的示例代码
2022/07/15 HTML / CSS