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

Python工具箱系列(四十)

时间:2023-08-22 16:38:35浏览次数:64  
标签:Python 压缩 print 四十 str shelve gzip 工具箱 open

使用gzip对数据进行压缩

这是python提供的压缩模块,便于用户对数据、文件进行压缩。功能类似于 GNU 应用程序gzip和gunzip。以下代码压缩一段字节流。

import gzip

# 压缩一段英文
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 = gzip.compress(originstr.encode('utf-8'))
print(len(str_compression))
print(str_compression)
decompress_str = gzip.decompress(str_compression)
print(decompress_str)
print(decompress_str.decode('utf-8'))

使用gzip可以直接将数据写入压缩文件中,gzip压缩文件可以像普通文件一样进行打开、写入的操作如下所示。

import gzip

def creategzip():
    info = '核聚变其实就是较轻的原子核在高温高压下聚合成较重的原子核,宇宙中的每一颗恒星都是一个天然的“核聚变反应堆”,在自身重力的挤压下,恒星的核心就会形成高温高压的环境,从而为核聚变提供了条件。原子核的原子序数越高,其发生核聚变的条件也就越高,而恒星核心的温度和压强是与恒星的质量成正比的,因此宇宙中的那些质量较低的恒星是聚变不出什么花样的。'
    
    with gzip.open(r'd:\dev\demo.txt.gz','wb') as out:
        out.write(info.encode('utf8'))
        
def readgzip():
    with gzip.open(r'd:\dev\demo.txt.gz','rb') as input:
        result = input.read()
        print(result.decode('utf-8'))
    
creategzip()
readgzip()

在工程应用中,经常有将几个指定的文件压缩后上传到指定服务器的访求。下面的示例代码中,使用超级轻量的shelve数据库来存储目标文件列表。同时使用gzip模块进行文件压缩。

--javascripttypescriptbashsqljsonhtmlcssccppjavarubypythongorustmarkdown

import shelve
import gzip
import shutil
from pathlib import Path


def generate_filelist():
    """
    在shelve数据库中保存要压缩的目标文件列表
    """
    db = shelve.open('targetfiles')
    db["target"] = [r'D:\toolkit\minikube\minikube.exe',
                    r'C:\Users\tianbin\Music\Syml - Wildfire (Piano and Violin Version).mp3']
    db.close()


def compressbyplan():
    """
    打开数据库,获得目标文件列表,将每个列表进行压缩
    """
    with shelve.open("targetfiles") as db:
        filelist = db['target']
        for targetfile in filelist:
            basename = Path(targetfile).name
            with open(targetfile, 'rb') as f_in:
                with gzip.open(f'{basename}.gz', 'wb') as output:
                    shutil.copyfileobj(f_in, output)


generate_filelist()
compressbyplan()

示例代码中,可以方便的将全路径的目标文件名放在shelve数据库中。shelve数据库是python内置的数据库,相当于把字典保存在了文件上,但同时因为有自己的格式,所以不能够像普通的文本文件一样直接查看与修改,从而保证了一定程度的安全性(虽然这个安全性像纸一样薄)。python提供的gzip模块只能够一次处理一个文件,所以使用pathlib库从全路径文件名中提取纯文件名,随后在本地创建压缩文件。

标签:Python,压缩,print,四十,str,shelve,gzip,工具箱,open
From: https://blog.51cto.com/shanxihualu/7190680

相关文章

  • python 使用re模块,配合正则表达式来查找字符串的想要的字符串
    一,首先:我们现了解一下python中正则表达式的基本规则有那些?1,字符串"\d"匹配0~9之间的一个数值eg:'dsas212b321321'使用r'\d'结果:(它会一次匹配一个数字依次查找)212321321  2,字符"+"重复前面一个匹配字符一次或者多次eg:'dsas212b321321'方式1:使用r'\d+'结果:(......
  • Python工具箱系列(四十)
    使用gzip对数据进行压缩这是python提供的压缩模块,便于用户对数据、文件进行压缩。功能类似于GNU应用程序gzip和gunzip。以下代码压缩一段字节流。importgzip#压缩一段英文originstr='TheWorldHealthOrganizationofficiallydeclaredonSaturdaythatthecurrent......
  • 全网最不墨迹解决方法,使用python3 worksheet.save()方式 出现:Test_list.worksheet.save(
    这是因为Worksheet对象没有save方法。要保存Excel工作簿,你需要使用Workbook对象的save方法。下面是一个修正后的示例代码:fromopenpyxlimportWorkbook#创建一个工作簿workbook=Workbook()#选择默认的活动工作表worksheet=workbook.active#定义要写入的数据列......
  • python实现"对修改封闭, 对扩展开放"
    对修改封闭,对扩展开放是架构设计的基本原则.意思是如果程序增加新的功能,则不应该修改老的代码,只需要增加新的代码就可以了,这样可以避免对老功能的破坏,新增功能如果有问题,也很容易回退.python语言如何实现这个设计目标呢?可以使用我们之前提到的消息机制来实现:pyt......
  • Selenium+python,切换frame,定位元素出现NoSuchElementException异常
    在某邮箱登录页面切换frame表单,以及定位frame表单中的元素时提示NoSuchElementException。查阅资料后发现某些frame表单或者页面中的元素id是动态更新的,每一次页面刷新后id值都不一样。  我之所以遇到这个问题,就是因为我使用了id进行定位,而当我运行脚本定位元素的时候,id已......
  • Lnton羚通云算力平台OpenCV Python颜色空间转换与抠图教程
    在OpenCVPython中,颜色空间转换和图像抠图是常见的图像处理任务。下面我将为你介绍如何进行颜色空间转换和图像抠图。颜色空间转换:在OpenCVPython中,可以使用 cv2.cvtColor() 函数将图像从一个颜色空间转换为另一个颜色空间。常用的颜色空间转换包括RGB、BGR、灰度(GRAY)、HS......
  • python判断ip所属地区 python 判断ip 网段
    IP地址是互联网中唯一标识一个设备的地址,有时候需要判断一个IP地址所属的地区,这就需要用到IP地址归属查询。本文将介绍Python如何通过IP地址查询所属地区并展示代码。一、IP地址归属查询IP地址归属查询又称IP地址归属地查询、IP地址归属地定位、IP地址查询、IP地址定位等,是通过......
  • CAN通讯-使用Python收发CAN数据保姆级教程(包含完整代码)
    CAN通讯-使用Python收发CAN数据配置环境1.环境配置1.1安装CAN通讯需要的包1.2安装kvaser_drivers以及KvaserCanKing2.使用Python收发数据2.1接发数据代码如下:2.1.1接收数据代码2.1.2发送数据代码2.2验证发送数据2.2.1使用KvaserCanKing接收数据2.2.2......
  • Python的wizard入门
    Wizard可以快速构建应用程序的图形化界面,下图是Wizard的工作区域介绍。第一步:打开AidLearning中的Wizard工具。单击第一个Layout_H容器,选中容器,在右侧属性窗口中将容器高度css_height调整为300px,容器宽度css_width也调整为300px。容器的默认名称为hbox0。第二步:给容器hbox0添......
  • python系列教程213
    声明:在人工智能技术教学期间,不少学生向我提一些python相关的问题,所以为了让同学们掌握更多扩展知识更好地理解AI技术,我让助理负责分享这套python系列教程,希望能帮到大家!由于这套python教程不是由我所写,所以不如我的AI技术教学风趣幽默,学起来比较枯燥;但它的知识点还是讲到位的了,也值......