首页 > 编程语言 >Python工具箱系列(三十九)

Python工具箱系列(三十九)

时间:2023-07-31 11:44:05浏览次数:34  
标签:level Python 压缩 zlib decompress 三十九 str print 工具箱

使用zlib对数据进行压缩

现实世界中,大量存在着对数据压缩的需求。为此,python内置了zlib压缩库,可以方便的对任意对象进行压缩。

下述代码演示了对字符串进行压缩:

import zlib

# 压缩一段中文
originstr = '神龟虽寿,犹有竟时;腾蛇乘雾,终为土灰。老骥伏枥,志在千里;烈士暮年,壮心不已。盈缩之期,不但在天;养怡之福,可得永年。幸甚至哉,歌以咏志。'
print(len(originstr))
str_compression = zlib.compress(originstr.encode('utf-8'), level=8)
print(len(str_compression))
print(str_compression)
decompress_str = zlib.decompress(str_compression)
print(decompress_str)
print(decompress_str.decode('utf-8')) 

# 压缩一段英文
originstr = 'The World Health Organization officially declared on Saturday that the current multi-country monkeypox outbreak outside of the traditional endemic areas in Africa has already turned into a public health emergency of international concern (PHEIC).'
print(len(originstr))
str_compression = zlib.compress(originstr.encode('utf-8'), level=8)
print(len(str_compression))
print(str_compression)
decompress_str = zlib.decompress(str_compression)
print(decompress_str)
print(decompress_str.decode('utf-8'))

运行上述代码后,会发现压缩并不一定会减少字节数,压缩的效率取决于压缩内容中的冗余程度。对于第一句的中文压缩后反而增加了字节数。但第二段英文则有明显的压缩比(246/180)。此外,在压缩时不指定level则使用缺省的压缩级别(大约是6),是一个在速度与压缩比间的平衡值。level的设定如下:

    • level=0,效果是不压缩。

    • level=1,速度最快

    • level=9,速度最慢,压缩比最高

    • level=-1,缺省值
      压缩一个文件的操作类似,示例代码如下:

import zlib

def compress(inputfile,outputfile):
    with open(inputfile,'rb') as input:
        with open(outputfile,'wb') as output:
            data = input.read()
            compressdata = zlib.compress(data)
            output.write(compressdata)

def decompress(inputfile,outputfile):
   with open(inputfile,'rb') as input:
        with open(outputfile,'wb') as output:
            data = input.read()
            compressdata = zlib.decompress(data)
            output.write(compressdata)

compress(r'd:\dev\sensor.dat',r'd:\dev\sensor.zlib')
decompress(r'd:\dev\sensor.zlib',r'd:\dev\sensor_d.dat')

使用vscode的hex editor可以打开三个文件如下图所示:

首先源文件与压缩解压后的文件完全一样。其次,压缩后的文件确实小多了。最后可以看出,从某种意义上来说,压缩也相当于加密。

 

标签:level,Python,压缩,zlib,decompress,三十九,str,print,工具箱
From: https://www.cnblogs.com/shanxihualu/p/17593047.html

相关文章

  • python 类命名
    Python类命名的流程在Python中,命名类是编写面向对象程序的基本步骤之一。一个类是一个蓝图或模板,用于创建具有相同属性和方法的对象。下面是一个简单的流程图,展示了如何命名Python类的步骤:步骤内容1确定类的目的和功能2选择合适的类名3使用驼峰命名法命名类......
  • python 快速创建大文件
    Python快速创建大文件在处理大数据集时,我们有时需要创建大文件进行测试、模拟或其他目的。Python作为一门功能丰富且易于上手的语言,提供了多种方法来快速创建大文件。本文将介绍几种常用的方法,并提供相应的代码示例。方法一:使用os模块写入随机数据importosdefcreate_large_f......
  • python 拷贝文件
    如何使用Python拷贝文件作为一名经验丰富的开发者,我很乐意教给你如何在Python中实现文件的拷贝操作。下面是整个过程的步骤:步骤描述1打开源文件2读取源文件内容3创建目标文件4将源文件内容写入目标文件5关闭文件现在我们逐步来看每一步应该如何实......
  • python 矩阵自我复制
    Python矩阵自我复制实现指南作为一名经验丰富的开发者,我将带领你学习如何实现"Python矩阵自我复制"。在本文中,我们将使用Python编程语言来实现这个功能。首先,让我们来看一下整个实现的流程。实现流程下面是实现"Python矩阵自我复制"的步骤:步骤描述1创建一个矩阵2......
  • python 矩阵 第一列
    如何实现Python矩阵第一列作为一名经验丰富的开发者,我很乐意教会刚入行的小白如何实现Python矩阵的第一列。下面是详细的步骤和相应的代码示例。步骤步骤一:创建一个矩阵首先,我们需要创建一个矩阵。在Python中,我们可以使用列表(List)来表示矩阵。下面是一个示例矩阵:matrix......
  • python 结构体
    Python结构体简介在Python中,结构体(struct)是一种用于处理二进制数据的模块。结构体提供了一种将数据打包和解包为指定格式的机制,这对于处理网络数据、读写文件等场景非常有用。本文将介绍Python结构体的基本概念、用法和示例。结构体的概念结构体是一种用于表示复合数据类......
  • python 截取等号后面内容
    Python截取等号后面内容简介在Python中,截取等号后面的内容意味着从一个字符串中获取等号后面的部分。这在处理配置文件或解析文本文件时非常有用。Python提供了多种方法来实现这个目标,包括字符串方法、正则表达式和切片操作。在本篇文章中,我们将介绍如何使用这些方法来截取等号......
  • python 接口返回存储json字符串包含\n
    实现“python接口返回存储json字符串包含\n”的步骤为了实现接口返回存储包含特殊字符\n的JSON字符串,我们需要按照以下步骤进行操作:步骤描述1创建一个Python接口2生成包含特殊字符\n的JSON字符串3返回JSON字符串现在,让我们一步步实现这个过程。步骤1:创建......
  • python 将数组保存txt
    Python将数组保存为txt文件作为一名经验丰富的开发者,我将向你介绍如何使用Python将数组保存为txt文件。在这篇文章中,我将提供一个简单的步骤表格,然后逐步解释每一步需要做什么,并附上相应的代码和注释。步骤以下是将数组保存为txt文件的步骤。步骤描述1导入所需的模块......
  • python 将十进制小数转为n进制小数
    Python将十进制小数转为n进制小数在计算机科学中,数字经常以十进制(base-10)表示。这意味着数字由10个不同的数字(0-9)组成。然而,有时我们需要将数字转换为其他进制,例如二进制(base-2)或十六进制(base-16)。在本文中,我们将重点讨论如何将十进制小数转换为n进制小数,其中n是2到36之间的任意......