前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >高技巧,Python 可以读写压缩文件吗

高技巧,Python 可以读写压缩文件吗

作者头像
Python知识大全
发布2020-03-18 11:34:30
6220
发布2020-03-18 11:34:30
举报
文章被收录于专栏:Python 知识大全Python 知识大全

987字 | 3分钟阅读

读写压缩文件

问题核心:★★★★ 口感:苦瓜

问题

你想读写一个 gzip 或 bz2 格式的压缩文件

解决方案

gzip 和 bz2 模块可以很容易的处理这些文件。两个模块都为 open() 函数提供了 另外的实现来解决这个问题。

比如,为了以文本形式读取压缩文件,可以这样做:

代码语言:javascript
复制
# gzip import gzipwith gzip.open('somefile.gz', 'rt') as f:  text = f.read()# bz2 import bz2with bz2.open('somefile.bz2', 'rt') as f:  text = f.read()

类似的,为了写入压缩数据,可以这样做:

代码语言:javascript
复制
# gzip import gzipwith gzip.open('somefile.gz', 'wt') as f:  f.write(text)# bz2 import bz2with bz2.open('somefile.bz2', 'wt') as f:  f.write(text)

如上,所有的 I/O 操作都使用文本模式并执行 Unicode 的编码/解码。类似的,如 果你想操作二进制数据,使用 rb 或者 wb 文件模式即可。

结论

大部分情况下读写压缩数据都是很简单的。但是要注意的是选择一个正确的文件 模式是非常重要的。如果你不指定模式,那么默认的就是二进制模式,如果这时候程 序想要接受的是文本数据,那么就会出错。gzip.open() 和 bz2.open() 接受跟内置的open() 函数一样的参数,包括 encoding,errors,newline 等等。

当写入压缩数据时,可以使用 compresslevel 这个可选的关键字参数来指定一压缩级别。比如:

代码语言:javascript
复制
with gzip.open('somefile.gz', 'wt', compresslevel=5) as f:  f.write(text)

默认的等级是 9,也是最高的压缩等级。等级越低性能越好,但是数据压缩程度也 越低。

最后一点,gzip.open() 和 bz2.open() 还有一个很少被知道的特性,它们可以作 用在一个已存在并以二进制模式打开的文件上。

比如,下面代码是可行的:

代码语言:javascript
复制
import gzipf = open('somefile.gz', 'rb')with gzip.open(f, 'rt') as g:  text = g.read()

这样就允许 gzip 和 bz2 模块可以工作在许多类文件对象上,比如套接字,管道和 内存中文件等。

-END-

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2020-03-06,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 Python 知识大全 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
文件存储
文件存储(Cloud File Storage,CFS)为您提供安全可靠、可扩展的共享文件存储服务。文件存储可与腾讯云服务器、容器服务、批量计算等服务搭配使用,为多个计算节点提供容量和性能可弹性扩展的高性能共享存储。腾讯云文件存储的管理界面简单、易使用,可实现对现有应用的无缝集成;按实际用量付费,为您节约成本,简化 IT 运维工作。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档