谁说Python的shutil不支持7z解压缩,我来扩展它的功能!

python:shutil --- 高阶文件操作 阅读详情

谁说Python的shutil不支持7z解压缩,我来教你扩展它的功能!

python的内置模块

在Python的标准库中,有哪些你常用并且觉得犀利无比的模块?不要说time、datetime、os、sys。这些模块常用是常用,但是逼格不够高啊。举个例子,如果你经常在LeetCode上刷题,你会发现有时Java、C需要几十行的算法题,如果Python使用了collections、itertools,可能三四行代码就结束了。

shutil的便利

日常的编码中,常会涉及到对文件、目录等的操作场景,如果我们使用os,可能需要对文件、文件夹,非空等进行逐个判断。举个例子:
我们现在要删除一个目录,目录中包含有文件与文件夹,如果使用os模块,没有现成可以使用的函数,需要我们进行判断与分类执行。

import os
# path是文件的路径,如果这个路径是一个文件夹,
# 则会抛出OSError的错误,这时需用用rmdir()来删除
os.remove(path)
# path是文件夹路径,注意文件夹需要时空的才能被删除
os.rmdir(path)

然后,多数初学者该做的事情就是,创建两个列表,然后用os.walk遍历目录,将文件与文件夹分别存入初始化的两个列表中,然后先统一删除文件,最后删除文件夹。
如果有上面这样操作的同学,请面壁三分钟。明显没有好好学习os.walk函数。

os.walk(top[, topdown=True[, οnerrοr=None[, followlinks=False]]])
top -- 是你所要遍历的目录的地址, 返回的是一个三元组(root,dirs,files)。

  • root 所指的是当前正在遍历的这个文件夹的本身的地址
  • dirs 是一个 list ,内容是该文件夹中所有的目录的名字(不包括子目录)
  • files 同样是 list , 内容是该文件夹中所有的文件(不包括子目录)

topdown --可选,为 True,则优先遍历 top 目录,否则优先遍历 top 的子目录(默认为开启)。如果 topdown 参数为 True,walk 会遍历top文件夹,与top 文件夹中每一个子目录。

onerror -- 可选,需要一个 callable 对象,当 walk 需要异常时,会调用。

followlinks -- 可选,如果为 True,则会遍历目录下的快捷方式(linux 下是软连接 symbolic link )实际所指的目录(默认关闭),如果为 False,则优先遍历 top 的子目录。

只需要将topdown设置为False,这样在遍历目录时,就会从根节点进行遍历,然后我们逐个删除就ok了,哪里需要那么麻烦!
代码如下:

import os

for root, dirs, files in os.walk('D:\\software_temp', topdown=False):
    for name in files:
        os.remove(os.path.join(root, name))
    for name in dirs:
        os.rmdir(os.path.join(root, name))

然后,说这么多无外乎为了引出最简便的方式 : shutil模块

如果换做shutil模块登场,那么执行删除目录的操作,只需要0.1秒的时间:

import shutil
shutil.rmtree('D:\\software_temp')

就这样,完事儿了...

文件解压缩

日常工作中,我们经常会使用python进行文件的解压缩处理。python自带的解压缩模块有zipfile, gzip, tarfile,如果我们需要解压rar文件则需要单独下载rarfile模块,针对每一种压缩文件,我们都需要针对文件类型进行对应模块的使用,是不是很繁琐?如果我们是用shutil呢?让我们先来看看shutil支持的解压类型:

import pprint
import shutil
pprint.pprint(shutil.get_unpack_formats())

output:
[('bztar', ['.tar.bz2', '.tbz2'], "bzip2'ed tar-file"),
 ('gztar', ['.tar.gz', '.tgz'], "gzip'ed tar-file"),
 ('tar', ['.tar'], 'uncompressed tar file'),
 ('xztar', ['.tar.xz', '.txz'], "xz'ed tar-file"),
 ('zip', ['.zip'], 'ZIP file')]

shutil已经包含了我们上面提到的所有文件。

.7z文件是什么鬼?

众所周知,zip的压缩率相比rar是比较低的,但是商业软件下载中,你很少会见到.rar的文件,why?因为专利啊...

RAR是一种专利文件格式,用于数据压缩与归档打包,开发者为尤金·罗谢尔(俄语:Евгений Лазаревич Рошал,拉丁转写:Yevgeny Lazarevich Roshal),RAR的全名是“Roshal ARchive”,即“罗谢尔的归档”之意。首个公开版本RAR 1.3发布于1993年。

所以,有很多产品在软件发布时,开始使用一种压缩率更高的.7z文件,这又是为什么?来让我们访问一下7-zip的官网:
7-zip官方主页: https://sparanoid.com/lab/7z/
在其中有一个许可协议是这样写的

许可协议:

7-Zip 是一款 开源 软件。大多数源代码都基于 GNU LGPL 许可协议下发布。AES 代码基于 BSD 许可下发布。unRAR 代码基于两种许可:GNU LGPL 和 unRAR 限制许可。更多下许可信息请查看:7-Zip 许可。您可以在任何一台计算机上使用 7-Zip ,包括用在商业用途的计算机,不对 7-Zip 进行捐赠或支付并不影响您的使用。

shutil扩展7z

说了这么多7z文件的好处,可我们看到shutil并不能解压该类型的文件啊。我们能否让shutil支持.7z文件,达到无脑解压缩呢?此时,你需要py7zr模块。
养成好习惯,遇到模块先找GitHub:https://github.com/miurahr/py7zr

1. 模块下载

pip install py7zr

2. 基本使用

当我们安装好py7zr后,它可以在cmd下直接运行该命令

List archive contents
$ py7zr l test.7z
Extract archive
$ py7zr x test.7z
Extract archive with password
$ py7zr x -P test.7z
  password?: ****
Create and compress to archive
$ py7zr c target.7z test_dir
Create multi-volume archive
$ py7zr c -v 500k target.7z test_dir
Test archive
$ py7zr t test.7z
Show information
$ py7zr i
Show version
$ py7zr --version

单独使用模块

import py7zr

archive = py7zr.SevenZipFile('sample.7z', mode='r')
archive.extractall(path="/tmp")
archive.close()

with py7zr.SevenZipFile('target.7z', 'w') as z:
    z.writeall('./base_dir')
3. shutil集成

之所以推荐py7zr给大家,不仅因为他的简单好用,更是由于他可以轻松集成于shutil,来看看它的使用方式吧:

from py7zr import pack_7zarchvie, unpack_7zarchive
import shutil

# register file format at first.
shutil.register_archive_format('7zip',
                               pack_7zarchive,
                               description='7zip archive')

shutil.register_unpack_format('7zip',
                              ['.7z'],
                              unpack_7zarchive,
                              description='7zip archive')

# extraction
shutil.unpack_archive('test.7z', '/tmp')

# compression
shutil.make_archive('target', '7zip', 'src')

pprint.pprint(shutil.get_unpack_formats())

# output:
[('7zip', ['.7z'], '7zip archive'),
 ('bztar', ['.tar.bz2', '.tbz2'], "bzip2'ed tar-file"),
 ('gztar', ['.tar.gz', '.tgz'], "gzip'ed tar-file"),
 ('tar', ['.tar'], 'uncompressed tar file'),
 ('xztar', ['.tar.xz', '.txz'], "xz'ed tar-file"),
 ('zip', ['.zip'], 'ZIP file')]

通过注册我们看到,shutil已经支持7z文件的解压了,就是如此简单。

The End

期待你关注我的公众号清风Python,如果你觉得不错,希望能动动手指转发给你身边的朋友们。
我的github地址:https://github.com/BreezePython

python批量解压7z等 提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录前言1.引入库 前言 因为下载了一批珍惜资源,需要尽快处理掉,所以搞了一个相对高效的解压脚本。脚本调用bandizip 的bz.exe,只解压过7z,未测试zip、tar、rar等格式,不过应该没问题。(需要添加后缀检测) 用了多进程,有点效果。 1.引入库 代码如下(示例): # coding="utf-8" #批量处理压缩文件名、解压缩与去除文件夹 import os import re import py7zr impo. 阅读详情

相关推荐

7z命令行参数详解--python暴破压缩文件命令必备

7z.exe在CMD窗口的使用说明如下: 7-Zip (A) 4.57 Copyright (c) 1999-2007 Igor Pavlov 2007-12-06 Usage: 7za <command> [<switches>...] <archive_name> [<file_names>...] [<@listfiles...&gt...

信息安全领域优质创作者|操作系统领域专家 9831

谁说Python的shutil不支持7z解压缩,我来教你扩展它的功能!

python的内置模块 在Python的标准库中,有哪些你常用并且觉得犀利无比的模块?不要说time、datetime、os、sys。这些模块常用是常用,但是逼格不够高啊。举个例子,如果你经常在LeetCode上刷题,你会发现有时Java、C需要几十行的算法题,如果Python使用了collections、itertools,可能三四行代码就结束了。 shutil的便利 日常的编码中,常会涉及到对文件、目录等的操作场景,如果我们使用os,可能需要对文件、文件夹,非空等进行逐个判断。举个例子: 我.

华为云官方博客 2964

代码审计工具学习之RISP(安装以及初步操作)

1 代码审计 1.1名词解释 代码审计(Code audit)是一种以发现程序错误,安全漏洞和违反程序规范为目标的源代码分析。软件代码审计是对编程项目中源代码的全面分析,旨在发现错误,安全漏洞或违反编程约定。 它是防御性编程范例的一个组成部分,它试图在软件发布之前减少错误。 C和C ++源代码是最常见的审计代码,因为许多高级语言(如Python)具有较少的潜在易受攻击的功能(例如,不检查边界的函数)。 顾名思义就是检查源代码中的安全缺陷,检查程序源代码是否存在安全隐患,或者有编码不规范的地方,通过..

weixin_52515588的博客 1万+

【python】 shutil解压7z压缩包

path=r'C:\Users\Lenovo\Desktop\2' #解压文件夹‘2’的7z压缩包 frompy7zrimportunpack_7zarchive importos,shutil os.chdir(path) shutil.register_unpack_format('7zip',['.7z'],unpack_7zarchive) shutil.unpack_archive('测试.7z',path) os.remove('测试.7z') ...

weixin_46376821的博客 551

vit的cam和注意力图: VIT模型的可解释性

VIT的热力图怎么画

YI_SHU_JIA的博客 1万+

CESM笔记——CESM1.0-CESM1.2.2-CESM2.1.3三个版本模式工作流对比

最近测试了CESM1.0,CESM1.2.2和CESM2.1.3三个版本,不同版本在workflow上有一些区别,来做点笔记。 CESM1.0 测试compset:B_2000,F_2000 workflow: 1. create_newcase -case ~/CESM/cesm1_0/script/B_2000 -compset B_2000 -res f19_g16 -mach tianhe 2. cd B_2000 (optional) env_mach_pes.xml ##修改核数,

砍柴姑娘Jourosy的博客 4944

Python基础——文件操作之压缩文件

基于Python内置的shutil模块可以实现对压缩文件的操作。 1、压缩文件 import shutil """ # base_name,压缩后的压缩包文件 # format,压缩的格式,例如:"zip", "tar", "gztar", "bztar", or "xztar". # root_dir,要压缩的文件夹路径 """ shutil.make_archive(base_name=r'datafile',format='zip',root_dir=r'files') 2、解压文件 "

华青水上的博客 454

手把手教你使用Segformer训练自己的数据

SegFormer 基于Swin transformer 修改

weixin_38353277的博客 2万+

python解压缩文件

python解压缩文件。

图灵追幕者博客录 857

Unity AR开发实战:从Vuforia图片识别到实体识别全流程解析

增强现实(AR)技术通过计算机视觉算法将虚拟信息叠加到现实世界,其核心原理在于对现实环境的感知与理解。在移动端AR开发中,图像识别与物体识别是实现虚实融合的关键技术,它们决定了虚拟内容能否准确、稳定地与现实对象对齐。Vuforia作为成熟的商业AR SDK,为开发者提供了从平面图像识别(Image Target)到三维实体识别(Model Target)的完整解决方案,极大降低了计算机视觉技术的应用门槛。在工程实践中,Vuforia通过封装复杂的特征提取与匹配算法,使开发者能够专注于交互设计与内容制作,广泛

weixin_30972263的博客 301

第1课:开篇扫盲——OpenClaw是什么?能帮你解决什么问题?(入门必看)

核心目标:学会安装、卸载、管理OpenClaw技能,自定义AI代理的性格与权限,让AI贴合自己的使用习惯。核心内容技能市场详解:ClawHub市场核心技能分类(办公、学习、开发、生活),热门技能推荐(web-search、文件处理、邮件管理)[superscript:3][superscript:4]。技能安装与卸载:终端命令实操(openclaw skill install/uninstall),技能更新与版本管理[superscript:3]。

从零开始,掌握网络安全。提供全面的网络安全教程、攻防演练技巧和行业动态。 1758

linux解压7z_谁说 Python 的 shutil 不支持 7z 解压缩,我来教你扩展它的功能!

Python 的内置模块 在 Python 的标准库中,有哪些你常用并且觉得犀利无比的模块?不要说 time、datetime、os、sys,这些模块常用是常用,但是逼格不够高啊。举个例子,如果你经常在 LeetCode 上刷题,你会发现有时 Java、C 需要几十行的算法题,如果 Python 使用了collections、itertools,可能只需要 3、4 代码就完成了!shu...

weixin_39660931的博客 482

【护网必备】Windows平台shellcode免杀加载器

bypass:McAfee、金山(数字签名)、火绒、ESET、卡巴企业版(时间5s 抖动50 Sleep_mask)、360全家桶(物理机)、Norton(加白程序资源)、WDF(PC)、WDF(Server)、Symantec(加白程序资源)bypass:金山(数字签名)、火绒、ESET、360全家桶(物理机)、WDF(PC)、WDF(服务器提示复查(关云保护))、McAfee、Norton(加白程序资源)、卡巴企业版(时间5s 抖动50 Sleep_mask)必须使用Bof操作,shell运行就掉线。

Fly_鹏程万里 1186

python3怎么打开7z压缩文件_谁说 Python 的 shutil 不支持 7z 解压缩,我来教你扩展它的功能!...

Python 的内置模块在 Python 的标准库中,有哪些你常用并且觉得犀利无比的模块?不要说 time、datetime、os、sys,这些模块常用是常用,但是逼格不够高啊。举个例子,如果你经常在 LeetCode 上刷题,你会发现有时 Java、C 需要几十行的算法题,如果 Python 使用了collections、itertools,可能只需要 3、4 代码就完成了!shutil 的...

weixin_39948247的博客 620

Python全栈入门到实战【基础篇 19】函数进阶:默认参数、递归函数与偏函数应用

本文深入探讨Python函数进阶的三大核心知识:默认参数、递归函数与偏函数。针对默认参数,揭示了可变对象作为默认值的陷阱,提出使用None替代的方案;解析递归函数的三大要素(终止条件、递归调用、问题拆解),并通过阶乘和斐波那契数列示例演示实现方法,同时给出尾递归和缓存装饰器两种优化策略;最后介绍偏函数如何通过functools.partial固化参数简化调用。这些技巧能显著提升函数在复杂场景下的灵活性与复用性,帮助开发者编写更高效的Python代码。

那些看似不起波澜的日复一日,会在某天让你看到坚持的意义 3864

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

leetcode 解压缩_谁说 Python 的 shutil 不支持 7z 解压缩,我来教你扩展它的功能!...

Python 的内置模块 在 Python 的标准库中,有哪些你常用并且觉得犀利无比的模块?不要说 time、datetime、os、sys,这些模块常用是常用,但是逼格不够高啊。举个例子,如果你经常在 LeetCode 上刷题,你会发现有时 Java、C 需要几十行的算法题,如果 Python 使用了collections、itertools,可能只需要 3、4 代码就完成了!shu...

weixin_32534943的博客 136

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

Python进行文件的压缩和解压缩操作-shutil模块和zipfile模块

Python进行文件的压缩和解压缩操作 1. shutil模块 import shutil 压缩 shutil.make_archive('压缩后存放位置','压缩格式','需要压缩的内容') 解压缩: shutil.unpack_archive("要解压的压缩文件", "解压后存放的位置") 2. zipfile模块 import zipfile 压缩: z1 = zipfile.ZipFile("D:/z.zip", "w") z1.write("需要压缩的文件") z1.close() 解压缩: z

林木无可栖的博客 592

OV9734 DATASHEET,完整规格书

OV9734完整规格书,包括电气参数,尺寸规格,寄存器配置表等

精雕软件(JDpaint) 5.5 绿色版

精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版精雕软件(JDpaint) 5.5 绿色版

Python常用模块14-python的shutil模块

文章目录一.shutil模块介绍1.1 目录和文件操作1.2 归档操作二.shutil模块实例2.1 shutil.copyfileobj2.2 shutil.copyfile2.3 shutil.copymode2.4 shutil.copystat2.5 shutil.copy2.6 shutil.copy22.7 shutil.copytree2.8 shutil.rmtree2.9 shutil.move2.10 shutil.make_archive()2.11 shutil.disk_usage

只是甲的博客 5605

python shutil_python的shutil模块

shutil模块是python高级的文件、文件夹、压缩包处理模块,常见的有拷贝,删除,移动,创建压缩文件和解压缩文件等拷贝文件对象:shutil.copyfileobj(file_src, file_dst[, length])将类似对象file_src从当前指针位置到结尾的文件内容复制到类似对象file_dst文件中。length(如果给定)是缓冲区大小。仅拷贝文件内容。拷贝文件或元数据:shu...

weixin_39661405的博客 239

2020-10-27

基本的Dos命令 打开CMD 开始 系统 命令提示符 WIN键+R 资源管理器的地址栏前面加cmd路径 #盘符切换 D: #查看目录下的文件 dir #切换目录 cd /d (路径) 例子 cd /d E:/IDE #cd..上一级 cd 文件夹 下一级 #清理屏幕 cls #退出exit #查看IP ipconfig #打开程序 clac(计算器) notepad(记事本) #ping命令 ping #创建文件 md (文件名) 如 md test cd test

qqasww的博客 233

7z.gz压缩文件的解压(python)

7z.gz的文件比较少(对于我来讲),当然如果安装了7z-zip工具,可以方便的对各种格式的压缩文件进行解压,它可以解压各种类型的压缩文件,比如:7z、XZ、BZIP2、GZIP、TAR、ZIP 以及 WIM。但是涉及到批量数据的解压还是用python代码比较方便。3.然后讲一下7z.gz的解压,按正常逻辑,python解压的话,先解压gz,再解压7z,我刚开始是这样简单的逻辑,但是发现解压gz格式的时候总是保存的0KB的7z文件,尝试各种方法,最后发现,可以一步到位,直接用7z解压7z.gz文件。

u011304078的博客 2342

Python解压7z压缩文件

上述代码将一次性把xxx.7z压缩文件里面的所有文件一一按照原文件层次结构递归解压到./tmp目录下。注意,如果xxx.7z里面包含有压缩文件,将不会解压。

Zhang Phil 4199

python解压7z文件_Python3:lzma解压缩.7z文件

I would like to unpack a .7z file. According to this question I can use thelzma package to do this.I was expecting something likeimport lzma#...with lzma.open('myFile.7z') as f:f.extractall('.')To ext...

weixin_39710041的博客 457

python批量压缩一个文件夹下一级子文件(包括文件夹)成7z文件(可随机4位数加密或指定密码)及对应的随机密码解压

document = docx.Document(os.path.join(password_folder, "加密密码.docx"))document.save(os.path.join(output_folder, "加密密码.docx"))password_folder = input("请输入有加密密码word文档的文件夹地址:")decompress_folder = input("请输入要解压的文件夹地址:")input_folder = input("请输入要压缩的文件夹地址:")

zhu9486364的博客 723

Python实现rar、zip和7z文件的压缩和解压

Python实现rar、zip和7z文件的压缩和解压

爱吃雪糕的小布丁的博客 1万+
上一篇: 帮小姐姐写个爬虫,赢得她请我喝下午茶,Nice啊!
下一篇: 遇见一个删除文件的问题,网上的答案却都在扯淡?
清风Python
博客等级 码龄7年 406粉丝 267原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值