python 循环解压 解压多重压缩包

在实际数据中,经常会有压缩包套压缩包的情况,并且有可能出现“zip”压缩包下面套“tar”的可能。

你可以运行后面的代码,来完成自动解压。代码会不断检查folder_a_path 文件夹下是否还有压缩包。目前支持zip、rar、tar、7z等四种格式的压缩文件。

你需要使用pycharm等工具,将zipfile源码中的“cp437”改成“gbk”,不然解压中文时会出乱码。共有两处需要修改的zipfile源码,修改后的结果如下:

            if fheader[_FH_GENERAL_PURPOSE_FLAG_BITS] & 0x800:# UTF-8 filenamefname_str = fname.decode("utf-8")else:fname_str = fname.decode("gbk")
            if flags & 0x800:# UTF-8 file names extensionfilename = filename.decode('utf-8')else:# Historical ZIP filename encodingfilename = filename.decode('gbk')

完整的代码代码如下:

import os
import tarfile
import patoolib
import zipfile
import py7zrdef extract_archive(archive_path, extract_path):"""解压缩指定路径的压缩包到指定目录。"""if archive_path.endswith(".zip"):with zipfile.ZipFile(archive_path, 'r') as zip_ref:zip_ref.extractall(extract_path)elif archive_path.endswith(".tar"):with tarfile.open(archive_path, 'r') as tar_ref:tar_ref.extractall(extract_path)elif archive_path.endswith(".7z"):with py7zr.SevenZipFile(archive_path, mode='r') as sz_ref:sz_ref.extractall(extract_path)elif archive_path.endswith(".rar"):patoolib.extract_archive(archive_path,outdir=extract_path)def extract_all_archives(folder_path):"""解压文件夹中的所有压缩包,直到文件夹中没有压缩包为止。"""flag=Falsefor root, dirs, files in os.walk(folder_path):for file in files:file_path = os.path.join(root, file)if file_path.endswith((".zip", ".tar", ".7z", ".rar")):temp_extract_path = os.path.join(root, file_path[0:file_path.rindex(".")])if not os.path.exists(temp_extract_path):print(f"【发现压缩包】{file_path}")flag=Trueos.makedirs(temp_extract_path,exist_ok=True)extract_archive(file_path, temp_extract_path)return flagif __name__=="__main__":"""直接处理文件夹,多次执行主函数,直至没有输出为止    """folder_a_path = r'C:\xxx\xxx'contains_unzip_file=Truewhile contains_unzip_file:contains_unzip_file=extract_all_archives(folder_a_path)

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

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

相关文章

@EnableEurekaServer

定义:EnableEurekaServer注解是Spring Cloud中的一个注解,用于将Spring Boot应用程序指定为Eureka服务器。 Eureka服务器是一个服务注册中心,也被称为发现服务器,管理和协调微服务。保存有关所有客户端服务应用程序的信息。 每个…

龙哥风向标 20230321~20230328 GPT拆解

AI领域多家公司发布创新产品 盈利点:利用AI领域多家公司发布创新产品的商机,可以开发针对这些新产品的培训课程或者定制化解决方案,以满足市场对新技术的需求。 操作步骤: 调研各家公司发布的新产品,了解其特点和应…

colorThief+vite+react使用方法

官网: Color Thief npm i --save colorthief 第一种,import载入图片 经过尝试,在vite中,要引入.mjs版本 import ColorThief from colorthief/dist/color-thief.mjs 第一种,通过import载入图片 import aa from /assets/123.jpgconst [resultColor,setResultColor]useState() …

Spring Boot导出EXCEL 文件

主要功能:实现java导出excel到本地 JDK版本&#xff1a;openJDK 20.0.1 依赖pom.xml <?xml version"1.0" encoding"UTF-8"?> <project xmlns"http://maven.apache.org/POM/4.0.0" xmlns:xsi"http://www.w3.org/2001/XMLSchem…

Java 面试题之 IO(一)

字节流 文章目录 字节流InputStream&#xff08;字节输入流&#xff09;OutputStream&#xff08;字节输出流&#xff09; 文章来自Java Guide 用于学习如有侵权&#xff0c;立即删除 InputStream&#xff08;字节输入流&#xff09; InputStream用于从源头&#xff08;通常是…

Centos Cron设置定时任务

这本是很简单的问题&#xff0c;但是我服务器重装系统两次&#xff0c;遇到的问题都不一样&#xff0c;所以记录一下 1.首先要确保服务器上有 cron 服务 sudo systemctl status crond2.设置时区 sudo timedatectl set-timezone Asia/Shanghai3.重启crond 服务使crond服务的时…

Xds (eXtensible Discovery Service)理解

Xds &#xff08;eXtensible Discovery Service&#xff09;理解 概念介绍 XDS&#xff1a;全称是 eXtensible Discovery Service&#xff0c;中文译为”可扩展的服务发现“。是一个扩展性的协议&#xff0c;可以用于配置和控制 Envoy 代理的各个方面&#xff0c;包括路由规则…

Leetcode 206 反转链表

反转链表 准备工作1&#xff09;ListNode基本结构2&#xff09;初始化ListNode集合 解法一&#xff1a;遍历创建新节点解法二&#xff1a;两组List&#xff0c;面向对象操作解法三&#xff1a;递归调用解法四&#xff1a;直接移动解法五&#xff1a;解法二的面向过程 Leetcode …

从c到c++——6:auto

在编写c程序时&#xff0c;需要在初始化变量时清楚地知道该变量的数据类型&#xff0c;有时这到这一点并不容易&#xff0c;在涉及到函数指针&#xff0c;多级指针时往往很难一下子给出准确的值。使用auto关键字很好的提高编程效率。 auto关键字会根据右边的类型自动生成适合的…

如何编写.gitignore文件

文章目录 前端架构师教你如何编写.gitignore文件.gitignore文件简介.gitignore文件的语法规则.gitignore文件的最佳实践常见问题与解决 前端架构师教你如何编写.gitignore文件 .gitignore文件简介 .gitignore文件是Git版本控制系统中一个非常有用的工具。它可以指定一组文件或…

Ubuntu 20.04 Server 使用命令行设置 IP 地址

1、编辑 /etc/netplan/ 目录下的配置文件00-installer-config.yaml (修改之前&#xff0c;把原来的文件备份) 按照对应的配置进行修改IP地址和网关 2、运行命令使其生效 sudo netplan apply 修改完成后&#xff0c;永久有效。重启后配置不会丢失

数据分析中需要用的的python知识(包括Numpy、Pandas、Matplotlib)

由于python的基础知识比较琐碎&#xff0c;这一块我打算以知识导图的形式呈现 软件&#xff1a;幕布 参考内容&#xff1a;菜菜菊花酱数据分析 python基础知识&#xff1a;https://www.mubu.com/doc/5uLBgn5LNTI numpy&#xff1a;https://www.mubu.com/doc/SgpdGGHMvI Pandas&…

2024年Java算法面试题

2024年Java实战面试题&#xff08;北京&#xff09;_java 5 年 面试-CSDN博客 一、波菲那契递归 System.out.println("banc " banc(10)) public static int banc(int n){if( n0 ){return 0;}else if( n1 ){return 1;}else{return banc(n-1) banc(n-2);} } 二、冒…

【智能家居入门之微信小程序控制下位机】(STM32、ONENET云平台、微信小程序、HTTP协议)

实现微信小程序控制单片机外设动作 一、使用ONENET可视化组件控制单片机外设动作二、使用微信小程序控制单片机外设动作三、总结 本篇博客话接上文&#xff1a; https://blog.csdn.net/m0_71523511/article/details/135892908 上一篇博客实现了微信小程序接收单片机上传的数据…

R语言【taxlist】——summary(),show(),print():打印taxlist对象及其内容的概述

Package taxlist version 0.2.4 Description 一种方法&#xff0c;用于显示 taxlist 对象内容的概述或所选分类组的概述。 Usage ## S4 method for signature taxlist summary(object,ConceptID,units "Kb",check_validity TRUE,display "both",maxs…

三、防御保护---防火墙安全策略篇

三、防御保护---防火墙安全策略篇 一、什么是安全策略二、安全策略的组成1.匹配条件2.动作3.策略标识 三、防火墙的状态检测和会话表1.会话表2.状态检测技术 四、ASPF--隐形通道五、用户认证1.用户认证的分类2.认证方式3.认证策略4.认证域 一、什么是安全策略 传统的包过滤防火…

Mysql 更新数据

MySQL中使用UPDATE语句更新表中的记录&#xff0c;可以更新特定的行或者同时更新所有的行。基本语法结构如下&#xff1a; UPDATE table_name SET column_name1 value1,column_name2 value2,……, column_namen valuen WHERE(condition); column_name1,column_name2,……,…

mcu专用看门狗复位芯片(如MAX706)

mcu专用看门狗复位芯片&#xff08;如MAX706&#xff09; 为什么要使用电压复位芯片RESET引脚WDO引脚MR引脚WDI引脚 国产替代型号应用电路1 推荐电路&#xff08;用一个跳线帽使能/关闭看门狗功能&#xff0c;调试MCU时防止看门狗芯片随便触发复位功能&#xff09;&#xff0c;…

字符串函数自实现

1.strlen size_t strlen(const char *s);返回字符个数&#xff08;不包含结尾\0&#xff09; #include<stdio.h> #include<string.h>int mystr(const char* s) {int cnt 0;int index 0;while(s[index] ! \0){index;cnt;}return cnt; } int main() {char s[] &…

智能时代:自然语言生成SQL与知识图谱问答实战

语义解析 前言语义解析的应用场景总结概论语义解析和大模型的关系延伸阅读 前言 语义解析技术可以提高人机交互的效率和准确性&#xff0c;在自然语言处理、数据分析、智能客服、智能家居等领域都有广泛的应用前景。特别是在大数据时代&#xff0c;语义解析能够帮助企业更快速…