python解压多层压缩包,兼容tar.gz .tgz .zip .7z .gz
7z解压使用的py7zlib,因为是python2。
zip解压使用zipfile
import py7zlibfrom subprocess import callimport gzipimport osdef unzip_all_data(self, path):unzip_success = True# 遍历当前文件夹所有文件,解压所有压缩包for f in os.listdir(path):filePath = path + "/" + f# 如果是文件夹,跳过if os.path.isdir(filePath):continueif ".tar.gz" in f[-7:] or ".tgz" in f[-4:]:ret = call(["tar", "-xvzf", filePath, "-C", path])if (ret == 0):# 解压完成删除原压缩包call(["rm", filePath])else:return Falseelif ".zip" in f[-4:]:(ret, msg) = self.unzip(filePath, path)if (ret == 0):# 解压完成删除原压缩包call(["rm", filePath])else:return Falseelif ".gz" in f[-3:]:(ret, msg) = self.ungz(path, f)if ret:# 解压完成删除原压缩包call(["rm", filePath])else:return Falseelif ".7z" in f[-3:]:print('55555', f)(ret, msg) = self.un7z(path, filePath)if ret:# 解压完成删除原压缩包call(["rm", filePath])else:return False# 再次查看本文件夹是否存在压缩包,防止多层压缩包if self.has_zip_file(path):unzip_success = self.unzip_all_data(path)if not unzip_success:return unzip_success# 遍历所有文件夹,递归每个文件夹for f in os.listdir(path):dirPath = path + "/" + fif os.path.isdir(dirPath):# __MACOSX文件夹是mac压缩文件时产生的缓存文件,无需处理if f == "__MACOSX":continueunzip_success = self.unzip_all_data(dirPath)if not unzip_success:return unzip_successreturn unzip_successdef has_zip_file(self, path):for f in os.listdir(path):if ".tar.gz" in f[-7:] or ".tgz" in f[-4:] or ".zip" in f[-4:] or ".gz" in f[-3:] or ".7z" in f[-3:]:return Truereturn Falsedef un7z(self, path, filePath):try:fp = open(filePath,'rb')#生成一个archive对象archive = py7zlib.Archive7z(fp)#读取文件中所有的文件名names = archive.getnames()#根据文件名返回文件的archiveFile类for name in names:member = archive.getmember(name)#读取文件的所有数据data = member.read()open(path + "/" + name, "w+").write(data)if fp:fp.close()return (True, "")except Exception as e:print("un7z", str(e))return (False, str(e))def ungz(self, path, f):try:# 获取文件的名称f_name = f.replace(".gz", "")#创建gzip对象g_file = gzip.GzipFile(path + "/" + f)#gzip对象用read()打开后,写入open()建立的文件里。open(path + '/' + f_name, "w+").write(g_file.read())g_file.close()return (True, "")except Exception as e:print("ungz", str(e))return (False, str(e))def unzip(self, source, dest):try:from zipfile import ZipFilezipSource = ZipFile(source, 'r')zipSource.extractall(dest)zipSource.close()return (0, "")except Exception as e:print("unzip", str(e))return (1, str(e))
python解压多层压缩包,兼容tar.gz .tgz .zip .7z .gz相关推荐
- Python解压所有压缩包到同一文件夹下
Python解压同一个目录下的所有压缩包 初衷 在学习黑马程序员课程的时候,由于压缩包很多,需要一个一个解压特别麻烦,所以写了一个脚本来一次性解压所有的压缩包. import zipfile impo ...
- python压缩包怎么安装-详解python解压压缩包的五种方法
这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. t ...
- python解压rar_Python解压 rar、zip、tar文件的方法
Q1 :如何解压 rar 压缩包文件? A : Step1:检查是否有 rarfile 第三方库,若没有该模块,则需要进行安装 : Step2:参考代码如下: import rarfile impor ...
- python解压gz_python解压gz
广告关闭 云服务器1核2G首年99年,还有多款热门云产品满足您的上云需求 执行程序,会在当前目录下生成aa.tar.gz文件二.解压defuntar(fname,dirs):解压tar.gz文件:pa ...
- python解压zip文件_python-29 python解压压缩包的几种方法
这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. t ...
- python解压压缩包的几种方法
这里讨论使用Python解压例如以下五种压缩文件: .gz .tar .tgz .zip .rar 简单介绍 gz: 即gzip.通常仅仅能压缩一个文件.与tar结合起来就能够实现先打包,再压缩. ...
- Linux:压缩与解压命令大全(tar、gz、bz2、Z、zip、rar、lha、rpm、deb)
tar tar xvf FileName.tar # 解包 tar cvf FileName.tar DirName # 仅打包,无压缩功能 .gz gunzip FileName.gz # 解压1 ...
- tar 批量解压多层目录文件
需求 tgz 文件存放在多层目录中 想解压到另一个位置,不影响当前文件夹 例子 类似这种目录结构./compressed_data/2011/01/01/file1.tgz ./compressed_ ...
- gz文件解压 linux,linux下.tar.gz和.gz文件解压详解
.tar.gz和.gz文件是两种不同的文件,需要区别对待,解压命令当然也不同咯,下面来分享一下他们各自的解压方法. 1. .tar.gz文件,这种文件是tar文件的压缩文件,可以使用tar命令进行解压 ...
最新文章
- html 写一个日志控件 查看log
- 高招攻略 领英助你清晰解读大数据专业
- Java7 java.util.concurrent 并发包计划
- 01.ShardingSphere笔记
- 用 Hasor 谈一谈MVC设计模式
- 关于 vim 的 magic 设置
- 国家开放大学2021春1087数学分析专题研究题目
- 5G多输入多输出技术,到底是个啥东东?
- linux网速卡怎么办_手机同是4G网络,为什么总比别人慢,学会这个方法,网速成倍提升...
- C# 使用 MemoryStream 将数据写入内存
- 如何修改zblog的css,修改Zblog中的CSS的方法
- php中ASCⅡ码的妙用
- K610D i7 D2 HM86 HD4600 安装 Mac OS 10.15.2 提供工具和EFI
- Qt开发笔记:OpenSSL库介绍、windows上mingw32版本的OpenSSL编译模块化
- Review Board了解
- 您的计算机究竟如何像美味的Reuben三明治
- 面试前的准备和注意事项(非常详细)
- 3d模型导入MAYA常见错误!
- Java中 VO、PO、DO、DTO、BO、QO、DAO、POJO的概念
- java毕业生设计弹幕视频网站计算机源码+系统+mysql+调试部署+lw