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

Python工具箱系列(四十四)

时间:2023-10-23 14:24:41浏览次数:36  
标签:LZMA multivolumefile Python py7zr 7z 四十四 算法 工具箱 archive

使用py7zr对目录与文件进行压缩打包

 

7z是一种主流高效的压缩格式,它拥有极高的压缩比。在计算机科学中,7z是一种可以使用多种压缩算法进行数据压缩的档案格式。该格式最初被7-Zip实现并采用,但是这种档案格式是公有的,并且7-Zip软件本身亦在GNU宽通用公共许可证(GNU LGPL)协议下开放源代码。LZMA软件开发工具包的最新版本为V9.34。7z格式的MIME类型为application/x-7z-compressed。通常使用7-Zip的7z格式能比使用zip格式的压缩文件小30-70%。并且使用7-Zip创建的zip格式比大多数其它压缩软件创建的都小2-10%。7z已公开了结构编辑功能,所以它可以支持任何一种新的压缩算法。类似于视频格式中的mkv,7z能够包容多种算法,目前下列压缩算法已被整合到了7z中:

压缩算法
 

备注

LZMA

改良与优化后的 LZ77 算法
 

LZMA2
 

改良的 LZMA 算法

PPMD

基于 Dmitry Shkarin 的 PPMdH 算法

BCJ

32 位 x86 可执行文件转换程序

BCJ2

32 位 x86 可执行文件转换程序
 

BZip2

标准 BWT 算法
 

Deflate

标准 LZ77-based 算法

LZMA算法是7z格式的默认算法。LZMA算法具有以下主要特征:

​◆高压缩比

◆可变字典大小

◆支持利用多CPU

◆LZMA压缩算法非常适于应用程序的内嵌。LZMA发布于GNU LGPL许可协议之下

在python中使用它,需要进行一些必要的安装如下:

​pip install py7zr
pip install multivolumefile

 

以下代码示例对7z的使用:

​import py7zr
import multivolumefile

targetfile = 'archive.7z'

# 压缩目录下所有文件,并且设置口令
with py7zr.SevenZipFile(targetfile, 'w', password='8848') as archive:
    # 压缩整个目录下文件,由于这个库存在BUG,所以只能够使用相对路径
    archive.writeall("gotoolkits/markdown")
    # 单个文件
    archive.write("gotoolkits/README.md")

# 解压出所有文件
with py7zr.SevenZipFile(targetfile, 'r', password='8848') as archive:
    archivelist = archive.list()
    # 显示压缩包中的所有文件信息
    for fileinfo in archivelist:
        print(fileinfo.filename)
    archive.extractall('../test')

# 创建一个多卷的压缩文件
with multivolumefile.open(targetfile, mode='wb', volume=1024) as target_archive:
    with py7zr.SevenZipFile(target_archive, 'w') as archive:
        archive.writeall("gotoolkits/markdown")

# 从多卷的压缩文件中释放所有文件
with multivolumefile.open(targetfile, mode='rb') as target_archive:
    with py7zr.SevenZipFile(target_archive, 'r') as archive:
        archive.extractall('../test/multi')

由于py7zr还处在成熟阶段,所以还有缺陷。无论是压缩文件还是文件,必须以当前工作目录为基准的相对路径。同样,解压缩时也需要以当前工作目录为基础的相对路径,默认均以工作目录为当前路径。这个代码有趣之处是引入了multivolumefile这个第三方库,它不仅能够支持类似对zip/tar/7z的分卷支持,其实任何文件都可以分卷。例如以下代码演示了对pdf文档的分卷操作:

​import multivolumefile

targetfilename = '数学之美.pdf'
mvfilename = 'archive.pdf'

# 10M形成一个卷
with multivolumefile.open(mvfilename, mode = 'wb', volume=1024*1024*10) as vol:
    with open(targetfilename, 'rb') as pdf:
        vol.write(pdf.read())

# 用多卷重新生成原文档
with multivolumefile.open(mvfilename, 'rb') as vol:
    with open(f'{targetfilename}.back','wb') as ouput:
        ouput.write(vol.read())

从代码中可以看到,multvolumefile库相当于加了一个壳,从而使分卷与组卷的过程对于文件的打开与读入来说是透明的,使用起来非常方便。

标签:LZMA,multivolumefile,Python,py7zr,7z,四十四,算法,工具箱,archive
From: https://www.cnblogs.com/shanxihualu/p/17782293.html

相关文章

  • ubuntu20.04下源码编译python 3.12
    需要注意的地方 1.安装依赖:https://devguide.python.org/getting-started/setup-building/#build-dependenciessudoapt-getinstallbuild-essentialgdblcovpkg-config\libbz2-devlibffi-devlibgdbm-devlibgdbm-compat-devliblzma-dev\libnc......
  • 图书推荐与管理系统Python+协同过滤推荐算法+Django网页界面
    一、介绍图书管理与推荐系统。使用Python作为主要开发语言。前端采用HTML、CSS、BootStrap等技术搭建界面结构,后端采用Django作为逻辑处理,通过Ajax等技术实现数据交互通信。在图书推荐方面使用经典的协同过滤算法作为推荐算法模块。主要功能有:角色分为普通用户和管理员普通用户可注......
  • [924] f-strings in Python
    ref:f-stringsinPythonref:Python'sF-StringforStringInterpolationandFormattingF-strings,alsoknownasformattedstringliterals,areafeatureintroducedinPython3.6thatprovideaconciseandconvenientwaytoembedexpressionsinside......
  • 分享一个批量转换某个目录下的所有ppt->pdf的Python代码
    大家好,我是皮皮。一、前言前几天在Python最强王者群【Python小小小白】分享了一份Python自动化办公的代码,可以批量转换某个目录下的所有ppt->pdf,非常强大。二、实现过程在正式跑代码之后,你可能需要按照对应的库,不然会报错。代码运行之后,本地会出现下面的UI界面,选择PPT文件夹即可,然......
  • Vscode中的python代码规范插件
    有几个流行的VSCode插件可以帮助你在Python开发中遵循代码规范。以下是其中一些常用的插件:1.Pylance:这是一个功能强大的语言服务器,提供了代码自动完成、类型检查、代码导航等功能。它可以与其他代码规范插件配合使用,提供实时的提示和建议。2.pylint:这是一个用于Python的静态代码......
  • 图书推荐管理系统Python+Django网页界面+协同过滤推荐算法
    一、介绍图书管理与推荐系统。使用Python作为主要开发语言。前端采用HTML、CSS、BootStrap等技术搭建界面结构,后端采用Django作为逻辑处理,通过Ajax等技术实现数据交互通信。在图书推荐方面使用经典的协同过滤算法作为推荐算法模块。主要功能有:角色分为普通用户和管理员普通用......
  • 延迟导入Python模块的几种方法
    延迟导入Python模块的几种方法-知乎(zhihu.com)#__init__.pyimportimportlib__all__=['complicated']def__getattr__(name):ifnamein__all__:returnimportlib.import_module("."+name,__name__)else:raiseAttributeError(f&qu......
  • 《最新出炉》系列初窥篇-Python+Playwright自动化测试-21-处理鼠标拖拽-番外篇
    1.简介前边宏哥拖拽有提到那个反爬虫机制,加了各种参数,以及加载js脚本文件还是有问题,偶尔宏哥好像发现了解决问题的办法,看到了黎明的曙光,宏哥就说试一下看看行不行,万一实现了。结果宏哥试了结果真的OK啊,但是宏哥第一次运行可以,后边就不行了,然后将编辑器关闭重启,再次运行又可以,宏哥......
  • Python根据类名实例化类
    python根据类的字符串名实例化对象_python给类名的字符串怎么实例化-CSDN博客Python如何根据类名实例化类_python依据class名实例化eval-CSDN博客python中如何根据给定的字符串类名来实例化一个类对象?-SegmentFault思否classTest:a=7def__int__(self,......
  • windows python 3.10.X 安装nose运行失败解决办法
    背景win11python3.10.Xpipinstallnose以后执行nosetests报错。报错内容如下:AttributeError:module‘collections’hasnoattribute‘Callable’ 省流在python3.10.X版本下执行pipuninstallnosepipinstall nose-py3卸载以后重新安装就可以搞定。 尝......