Python压缩模块gzip

news2024/11/28 6:30:30

文章目录

    • 初步认识
    • 压缩和解压缩函数

初步认识

gzip是用于处理gzip格式的模块,相当于是zlib模块面向文件的一个应用,其最常用的函数为open

有了open,那就得演示一下文件读写

import gzip
with gzip.open('test.txt.gz', 'wb') as f:
    f.write("压缩文件测试".encode('utf8'))

效果为

在这里插入图片描述

其中wb表示写入二进制,相应地,rb就是读取二进制

with gzip.open('test.txt.gz', 'rb') as f:
    print(f.read().decode('utf-8'))
# 压缩文件测试

这里面需要注意的是,由于读写时采用了二进制的形式,所以写入文件时进行了编码;读取时进行了解码。

open的完整定义为

gzip.open(filename, mode='rb', compresslevel=9, encoding=None, errors=None, newline=None)

其中,mode有如下几种

类别参数
二进制r, rba, abw, wbx, xb
文本rt, at, wt, xt

其中,r表示读取;w表示写入;a表示追加;x表示新建并写入,如果文件已经存在,则报错。

compresslevel表示压缩程度,其取值在zlib中有定义,下面是zlib模块中内置的四个常量。

压缩模式
1Z_BEST_SPEED最快速度和最低压缩率
9Z_BEST_COMPRESSION最慢速度最高压缩率
0Z_NO_COMPRESSION不压缩
-1Z_DEFAULT_COMPRESSION一般相当于设压缩等级为6

gzip.open的返回值是一个GzipFile文件,其构造函数为

gzip.GzipFile(filename=None, mode=None, compresslevel=9, fileobj=None, mtime=None)

GzipFile的构造函数中,除了fileobjmtime之外,与gzip.open在二进制模式下的表现是完全相同的。其中,fileobj表示文件标识,mtime表示文件的创建时间。

GzipFile类还封装了如下函数

  • peek(n) 可在不移动文件指针的情况下读取n个未压缩字节。

压缩和解压缩函数

最后zlib中封装了必备的压缩和解压缩函数

  • compress(data, compresslevel=9, *, mtime=None) 压缩data,返回值为二进制对象。
  • decompress(data) 解压缩data,返回未压缩数据的 bytes 对象。

例如

import sys
ori = 'ifyoumissthetrainimonyouwillknowthatiamgone'*10
bOri = ori.encode()
sys.getsizeof(bOri) # 463
c = gzip.compress(bOri)
sys.getsizeof(c)    # 102

即经过gzip.compress压缩之后,字符串由463字节变成了102字节。

如果调整压缩层级

ori = 'if you miss the train i\'m on you will know that i am gone'*100
bOri = ori.encode()
for i in range(10):
    c = gzip.compress(bOri, compresslevel=i)
    print(i, sys.getsizeof(c))

'''返回结果如下
0 5756
1 159
2 155
3 155
4 131
5 131
6 131
7 131
8 131
9 131
'''

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/142884.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

Halcon笔记1

一、前言 最近来触碰一下halcon,一直以来作为ai算法工程师,虽然知道halcon,但是一直也没有用过 对于我们用户来说,halcon与opencv的差距主要在下面: (1)halcon是闭源的,商业的软件…

ATJ2158 LRADC的使用

LRADCLRADC对应引脚LRADC采样电压范围及位数使用LRADC涉及到的驱动文件如何使用不同的LRADC通道LRADC对应引脚 LRADC对应引脚备注LRACDC1WIO0/WIO1LRACDC2GPIO8/GPIO20LRACDC3GPIO9/GPIO21LRACDC4GPIO35LRACDC5GPIO5LRACDC6无没有找到相应的引脚LRACDC7GPIO63 LRADC采样电压范…

剑指 Offer 22. 链表中倒数第k个节点

剑指 Offer 22. 链表中倒数第k个节点 题目 输入一个链表,输出该链表中倒数第k个节点。为了符合大多数人的习惯,本题从1开始计数,即链表的尾节点是倒数第1个节点。 例如,一个链表有 6 个节点,从头节点开始&#xff0…

基于R的Bilibili视频数据建模及分析——聚类分析篇

基于R的Bilibili视频数据建模及分析——聚类分析篇 文章目录基于R的Bilibili视频数据建模及分析——聚类分析篇0、写在前面1、数据分析1.1 聚类分析1.2 聚类统计1.3 系统聚类1.4 Kmeans与主成分分析2、参考资料0、写在前面 实验环境 Python版本:Python3.9Pycharm版本…

python打包windows服务 开机自启动守护进程

自启动方法一:系统自启动设置python程序开机自启动1、创建一个xxx.bat文件,右键编辑2、在xxx.bat文件里面写入以下内容后保存:(可以按照如下流程自己去cmd中测试一下)d: #如果需要开机自启动的python程序在c盘&#xf…

Typora插图免费上传云端教程(太香了)

1、前言 我们平时在使用Typora时,文档中的图片一般是保存在本地,很方便,但是有些场景也有问题,比如我全部拷贝到有道云笔记中或者全部拷贝到CSDN中去发布时,你会发现,所有图片都无法预览了,此时…

不要为了“分库分表”而“分库分表”

数据库瓶颈 分库分表 分库分表工具 分库分表带来的问题 什么时候考虑分库分表 数据库瓶颈 不管是IO瓶颈还是CPU瓶颈,最终都会导致数据库的活跃连接数增加,进而逼近甚至达到数据库可承载的活跃连接数的阈值。在业务service来看, 就是可用…

解析HTTP请求报文(GET、POST)

目的: 一个WEB服务器需要解析客户端(浏览器)发来的请求,两种常见的请求方式是GET和POST。 GET的请求格式: GET请求没有请求体只有请求头GET请求的请求参数放在URL后加上一个"?"的后面,参数以…

时序图文献精度——1.2018-KDD-Embedding Temporal Network via Neighborhood Formation

Embedding Temporal Network via Neighborhood Formation Abstract 作者发现,在现有的研究中,以节点间顺序交互事件为特征的网络的完整时间形成过程还很少被建模,在这边文章中,作者引入邻域形成序列的概念来描述节点的演化&…

第四篇 - 对象的深层劫持

一,前言 上篇,主要介绍了在 Vue 的数据初始化流程中,对象属性的单层劫持是如何实现的 回顾一下,主要涉及以下几个核心点: data 为函数和对象的处理,及当 data 为函数时的 this 指向问题Observer 类&…

一文弄清楚vue中的computed和methods

1.实现业务我们现在需要实现一个业务,就是我们有一个输入框,之后我们修改输入框的值,就在此时输入框的值会呈现到页面中的h1标签上去2.利用Vue中的插值语法实现业务2.1什么是插值语法?插值语法就是vue中用来存放预留值得方法&…

【前端】CSS盒子模型

五、盒子模型 1.1盒子模型的介绍 盒子的概念 页面中的每一个标签,都可看做是一个“盒子”,通过盒子的视角方便的进行布局浏览器在渲染(显示)网页时,会奖网页中的元素看作是一个个的矩形区域,我们也形象地…

<Python的函数(1)>——《Python》

目录 1. 函数 2. 语法格式 2.1 创建函数/定义函数 ​2.2 调用函数/使用函数 3. 函数参数 4. 函数返回值 5. 变量作用域 后记:●由于作者水平有限,文章难免存在谬误之处,敬请读者斧正,俚语成篇,恳望指教&…

Android input 事件分发 -- inputReader

inputReaderinputReaderinputReader 这个章节主要是围绕inputReader 、inputReaderThread进行的,老规矩先上时序图通过前面我们已经知道了InputReader和InputReaderThread都是在InputManager的构造函数里面new出来的,然后InputReaderThread的启动是在Sys…

图文详解:内存总是不够,我靠HBase说服了Leader为新项目保驾护航

最近在工作中用到了 Hbase 这个数据库,也顺便做了关于 Hbase 的知识记录来分享给大家。其实 Hbase的内容体系真的很多很多,这里介绍的是小羽认为在工作中会用到的一些技术点,希望可以帮助到大家。 可以这么说互联网都是建立在形形色色的数据…

剑指offer----C语言版----第十天

目录 1. 二进制中 1 的个数 1.1 题目描述 1.2 可能引起错误的解法 1.3 常规解法 1.4 思路优化 1. 二进制中 1 的个数 原题链接: 剑指 Offer 15. 二进制中1的个数 - 力扣(LeetCode)https://leetcode.cn/problems/er-jin-zhi-zhong-1de-ge-shu-lcof…

电路方案分析(十五)符合 EMC 标准的汽车制动灯和尾灯设计方案

符合 EMC 标准的汽车制动灯和尾灯设计方案 tips:TI设计方案参考分析:TI Designs:TIDA-01374 1.系统描述 1.1关键参数 2.系统概述 2.1系统框图 2.2关键元器件 3.设计原理 3.1双重亮度设计 3.2 电荷泵设计 3.4 LED故障设计 3.3 MOSFET驱动电…

LeetCode Hot 100 笔记

文章目录链表21. 合并两个有序链表栈20. 有效的括号Java栈链表 链表的题目一般都不太难,画图,别怕麻烦 21. 合并两个有序链表 解法一:迭代 用一个指针cur跟踪当前节点,每次从list1和list2中选取小的节点,链接起来建…

什么是轻量化,轻量化模型is all your need hhh

其实学了几个小月,我们肯定知道,MLP有多deeper ,卷积层有多少层呀 抑或是Transformer架构,大量的参数,只能用huge 来描述, 可实际上我们的设备,有时候并没有服务器那么厉害,所以人…

阿里云认证为什么那么多人考?考试内容难不难?

我国人口密集,每年有大量的毕业生涌进社会,除此之外还有很多进入社会很久的打工人,想要跳槽,到更加挣钱的岗位,待遇更好的公司去。为了能够早日买房、买车,很多人会选择社会热门行业去学习,甚至…