python使用zipfile递归压缩和解压缩文件
import shutil,zipfile,os
class ToolModel(object):
    def dfs_get_zip_file(self,input_path, result, ignore=[]):
        '''
        递归目录
        :param input_path: 输入路径
        :param result: 列表
        :param ignore: 忽略文件或目录名
        :return:
        '''
        files = os.listdir(input_path)
        for file in files:
            filePath = input_path + '/' + file
            if file in ignore:
                continue
            if os.path.isdir(filePath):
                self.dfs_get_zip_file(filePath, result, ignore)
            else:
                result.append(filePath)
    def zip_path(self,input_path, output_path, ignore=[]):
        '''
        :param input_path:  输入路径   /app/adminkit
        :param output_path: 输出路径  /app/adminkit.zip
        :param ignore: 忽略文件或目录名
        :return:
        '''
        outdir = os.path.dirname(output_path)
        if not os.path.isdir(outdir):
            os.makedirs(outdir)
        f = zipfile.ZipFile(output_path, 'w', zipfile.ZIP_DEFLATED)
        filelists = []
        self.dfs_get_zip_file(input_path, filelists, ignore)
        for file in filelists:
            file = file.replace('\\', '/')
            input_path = input_path.replace('\\', '/')
            f.write(file, file.replace(input_path, ''))
        f.close()
        return output_path
    def unzip(self,filename: str,dirname):
        '''
        解压缩
        :param filename: 压缩文件名
        :param dirname: 解压缩输出目录
        :return:
        '''
        try:
            file = zipfile.ZipFile(filename)
            file.extractall(dirname)
            file.close()
            # 递归修复编码
            self.rename(dirname)
        except:
            print(f'{filename} unzip fail')
    def rename(self,pwd: str, filename=''):
        """压缩包内部文件有中文名, 解压后出现乱码,进行恢复"""
        path = f'{pwd}/{filename}'
        if os.path.isdir(path):
            for i in os.scandir(path):
                self.rename(path, i.name)
        newname = filename.encode('cp437').decode('gbk')
        os.rename(path, f'{pwd}/{newname}')
    def del_file(self,filepath):
        """
        删除指定路径下的所有文件和文件夹
        :param filepath: 路径
        :return:
        """
        del_list = os.listdir(filepath)
        for f in del_list:
            file_path = os.path.join(filepath, f)
            if os.path.isfile(file_path):
                os.remove(file_path)
            elif os.path.isdir(file_path):
                shutil.rmtree(file_path)
python使用zipfile递归压缩和解压缩文件的更多相关文章
- Java用ZIP格式压缩和解压缩文件
		转载:java jdk实例宝典 感觉讲的非常好就转载在这保存! java.util.zip包实现了Zip格式相关的类库,使用格式zip格式压缩和解压缩文件的时候,须要导入该包. 使用zipoutput ... 
- C# - WinFrm应用程序调用SharpZipLib实现文件的压缩和解压缩
		前言 本篇主要记录:VS2019 WinFrm桌面应用程序调用SharpZipLib,实现文件的简单压缩和解压缩功能. SharpZipLib 开源地址戳这里. 准备工作 搭建WinFrm前台界面 添 ... 
- [Java 基础]   使用java.util.zip包压缩和解压缩文件
		reference : http://www.open-open.com/lib/view/open1381641653833.html Java API中的import java.util.zip ... 
- 在C#中利用SharpZipLib进行文件的压缩和解压缩收藏
		我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net(http://www.icsharpcode.net/OpenSource/SharpZipL ... 
- iOS中使用ZipArchive压缩和解压缩文件-备
		为什么我需要解压缩文件 有许多原因能解释为什么我要在工程中使用压缩和解压缩功能,下面是几个常见的原因: 苹果App Store的50M下载限制 苹 果公司出于流量的考虑,规定在非WIFI环境下,限制用 ... 
- IO操作之使用zip包压缩和解压缩文件
		转自:http://www.cdtarena.com/java.htmlJava API中的import java.util.zip.*;包下包含了Java对于压缩文件的所有相关操作. 我们可以使 ... 
- 使用commons-compress操作zip文件(压缩和解压缩)
		http://www.cnblogs.com/luxh/archive/2012/06/28/2568758.html Apache Commons Compress是一个压缩.解压缩文件的类库. 可 ... 
- C# 利用ICSharpCode.SharpZipLib.dll 实现压缩和解压缩文件
		我们 开发时经常会遇到需要压缩文件的需求,利用C#的开源组件ICSharpCode.SharpZipLib, 就可以很容易的实现压缩和解压缩功能. 压缩文件: /// <summary> ... 
- C#利用SharpZipLib进行文件的压缩和解压缩
		我在做项目的时候需要将文件进行压缩和解压缩,于是就从http://www.icsharpcode.net下载了关于压缩和解压缩的源码,但是下载下来后,面对这么多的代码,一时不知如何下手.只好耐下心来, ... 
- C#压缩和解压文件
		这里用两种方法实现C#压缩和解压文件 1.使用System.IO.Compression名称空间下的相关类(需引用 System.IO.Compression.FileSystem和System.IO ... 
随机推荐
- 性能测试必备知识(4)- 使用 stress 和 sysstat
			做性能测试的必备知识系列,可以看下面链接的文章哦 https://www.cnblogs.com/poloyy/category/1806772.html stress 介绍 Linux 系统压力测试 ... 
- 设计模式:bridge模式
			目的:将“类的功能层次结构”和“类的实现层次结构”分类 类的功能层次:通过类的继承添加功能(添加普通函数) 类的实现层次:通过类的继承实现虚函数 理解:和适配器模式中的桥接方法相同 例子: class ... 
- layui 数据表格自带的导出Excel,身份证等E+/000问题解决
			layui数据表格的工具栏自带导出Excel 会将身份证等 长整数的 自动变成E+并且 后面有000.从而导致数据不能完整导出. 解决方案: 1.先下载Excel的插件包.将压缩包内的两个js放到 l ... 
- Puppeteer爬虫实战(二)
			连接浏览器 上一篇说到了Puppeteer本质是使用了Chrome Devtools协议控制浏览器,本篇就说说连接方式. 常规Hook浏览器 此方式其实就是需要一个浏览器可执行文件(不同平台需要下载对 ... 
- [jvm] -- 常用内存参数配置篇
			新生代 ( Young ) 与老年代 ( Old ) 的比例的值为 1:2 ( 该值可以通过参数 –XX:NewRatio 来指定 ) Eden : from : to = 8 : 1 : 1 ( 可 ... 
- Mybatis——@MapperScan原理
			@MapperScan配置在@Configuration注解的类上会导入MapperScannerRegistrar类. 而MapperScannerRegistrar实现了ImportBeanDef ... 
- hostapd阅读(openwrt)-2
			深入追踪openwrt下的hostapd之后,发现openwrt无线管理机制格外的复杂,几乎所以的触发与回调均离不开ubus,关于ubus这里不作解释,先大概了解其用途即可(出门左转:https:// ... 
- Linux内存参数
			用free -m查看的结果:# free -m total used free shared buffers cachedMem: 50 ... 
- java 控制语句、数组、方法
			一.控制语句 1.if 语句 if语句是指如果满足某种条件,就进行某种处理. 流程图: 2. if…else语句 语法格式: if (判断条件){ 执行语句1 …… }else{ 执行语句2 …… } ... 
- jmeter正则表达式,萌新入门篇
			@@@@@@@@@@@@ 透过现象看本质 jmeter中正则表达式对我们来说,就是一个工具,他可以帮助我们做的事就是从一堆数据中截取出我们想要的字段,比如从setcookie:DERF12456DAS ... 
