读写压缩文件

问题

你想读写一个 gzip 或 bz2 格式的压缩文件。PS: zip格式的用zipfile模块

解法

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() 函数一样的参数,包括 encoding, errors, newline 等等。

当写入压缩数据时,可以使用 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 Cookbook 3rd》笔记(5.7):读写压缩文件相关推荐

  1. 《Python Cookbook 3rd》笔记汇总

    文章目录 一.数据结构 二.字符串和文本 三.数字.日期和时间 四.迭代器与生成器 五.文件与IO 一.数据结构 标题 关键词 1.1:拆分序列后赋值给多个变量 可迭代对象.拆分赋值 1.2:拆分任意 ...

  2. 《Python Cookbook 3rd》笔记(1.4):查找最大或最小的N个元素

    <Python Cookbook 3rd>1.4:查找最大或最小的N个元素 问题 怎样从一个集合中获得最大或者最小的N个元素列表? 解法 heapq 模块有两个函数:nlargest()和 ...

  3. Machine Learning with Python Cookbook 学习笔记 第9章

    Chapter 9. Dimensionality Reduction Using Feature Extraction 前言 本笔记是针对人工智能典型算法的课程中Machine Learning w ...

  4. python读写压缩文件使用gzip和bz2

    python读写压缩文件使用gzip和bz2 #读取压缩文件 # gzip compression import gzip with gzip.open('somefile.gz', 'rt') as ...

  5. Python Cookbook 3rd Edition Documentation

    Python Cookbook 3rd Edition Documentation 文章目录 第一章:数据结构和算法 1.1 解压序列赋值给多个变量 问题 解决方案 讨论 1.2 解压可迭代对象赋值给 ...

  6. python读压缩文件内容_Python读写压缩文件的方法

    问题 你想读写一个gzip或bz2格式的压缩文件. 解决方案 gzip 和bz2模块可以很容易的处理这些文件. 两个模块都为 open()函数提供了另外的实现来解决这个问题. 比如,为了以文本形式读取 ...

  7. 《Python cookbook》笔记二

    <Python cookbook>笔记二 第二章 字符串和文本 -使用多个界定符分割字符串- 你需要将一个字符串分割为多个字段,但是分隔符 (还有周围的空格) 并不是固定 的. # str ...

  8. Machine Learning with Python Cookbook 学习笔记 第8章

    Chapter 8. Handling Images 前言 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放 ...

  9. Machine Learning with Python Cookbook 学习笔记 第6章

    Chapter 6. Handling Text 本笔记是针对人工智能典型算法的课程中Machine Learning with Python Cookbook的学习笔记 学习的实战代码都放在代码压缩 ...

最新文章

  1. 因一个计算机故障而“停工”!观测宇宙 30 多年的哈勃太空望远镜还能坚持多久?...
  2. 史上最全的正则表达式
  3. idea无法搜索插件问题解决
  4. wps文字退格会删掉文字_WPS第二行文字前面有大量空白,按退格不会动,只是把上一行末尾的字去掉。...
  5. 纯javascript实现pdf签名_Mac最强PDF编辑工具
  6. 洛谷 - P2770 航空路线问题(最大费用最大流+路径打印)
  7. import lombok 报错_Android上使用Lombok和set、get方法告别
  8. 第一个一千行总结-数据结构C复习--知识点总结1--一到四章
  9. [导入]基于Web的B/S结构实时监控系统[转]
  10. 删除数据oracle,oracle删除数据
  11. 如何理解“KISS 原则”?
  12. 【信号处理】语音时域频域频谱图分析含Matlab源码
  13. C语言每日一练——第118天:百钱百鸡问题
  14. 小爬虫爬起点中文网收藏榜
  15. Python彩色图片转成黑白图片
  16. Sping IOC 理解(转)
  17. 傻妞对接TG/监控变量国内国外机视频教程 6.16
  18. 疫情已经结束,快递行业现状如何
  19. 树莓派(RaspberryPI 3)用作HP LaserJet P1007的打印机服务器
  20. 基于OpenLayer的室内地图前端设计开发

热门文章

  1. 一个网络资深者发起的思考
  2. 串口通讯编程一日通1(整合资料) .
  3. 安徽大学计算机考研学硕2019初试单科线,安徽大学2019年考研复试分数线已公布...
  4. arcgis选出点规定范围的面
  5. 【转】深入浅出理解有限状态机
  6. 【转】应用架构之道:分离业务逻辑和技术细节
  7. 【转】注册Azure AD 2.0 应用程序
  8. 第十三节:Lambda、linq、SQL的相爱相杀(2)
  9. 如何将C语言翻译成汇编语言,如何把汇编语言转换成C语言
  10. 静物摄影用光技巧_摄影技巧:摄影如何用光?摄影大师总结的10点,非常受用!...