python 解压zip rar 7z文件

news/2024/11/23 5:51:42/

python 解压zip rar 7z文件

  • 1、zip等格式文件解压文件
  • 2、删除临时文件
  • 3、shutil添加解压7z格式文件支持
  • 4、rar格式文件解压
    • 利用 winrar 软件进行解压
  • 5、zip和rar文件格式

1、zip等格式文件解压文件

使用shutil,支持的压缩文件格式,一般常用解压格式为.zip文件。

import shutilprint(shutil.unpack_formats())

输出:

[('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')]

解压文件

extract_dir = "./tmp/"
shutil.unpack_archive(current_file, extract_dir)

2、删除临时文件

解压文件后需要删除临时文件

import os
os.remove(full_name)

3、shutil添加解压7z格式文件支持

import os
from py7zr import unpack_7zarchive
import shutilif __name__ == "__main__":path = r"E:\Dataset\新建文件夹"suffix = ".zip"  # ".7z"  ".rar"# file_list = GetFiles(path, suffix)# print("there are ", len(file_list), "zip files")# file_list = GetFiles(path, suffix)# print("there are ", len(file_list), "rar files")shutil.register_unpack_format('7zip', ['.7z'], unpack_7zarchive)file_list = GetFiles(path, suffix)print("there are ", len(file_list), "7z files")current_file = file_list[0]print("current file ", current_file)extract_dir = "./tmp/"shutil.unpack_archive(current_file, extract_dir)

4、rar格式文件解压

安装 unrar 模块:

pip install rarfile
pip install unrar

下载 http://www.rarlab.com/rar/UnRARDLL.exe
安装后设置环境变量

在这里插入图片描述

测试

(pytorch190) C:\Users\wmz>python
Python 3.8.10 (default, May 19 2021, 13:12:57) [MSC v.1916 64 bit (AMD64)] :: Anaconda, Inc. on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> from unrar import rarfile

参考:解决Python下安装unrar后仍然提示Couldn’t find path to unrar library…
如果文件后缀名并不是文件的压缩格式,这就比较麻烦,比如后缀名为.rar的文件实际是.zip压缩格式。
这就需要判断文件的真实压缩格式,然后在做相应的处理。

import gzip
import os
import tarfile
import zipfile
from unrar import rarfiledef decompress_rar(src_file, dest_dir):"""Decompress rar file into destination direction"""rv = (True, '')try:rar = rarfile.RarFile(src_file)rar.extractall(dest_dir)except Exception as e:rv = (False, e)return rvreturn rvdef decompress_tar_and_tgz(src_file, dest_dir):"""Decomporess .tar or .tgz file into destination directory"""rv = (True, '')try:tar = tarfile.open(src_file)names = tar.getnames()for name in names:tar.extract(name, dest_dir)tar.close()except Exception as e:rv = (False, e)return rvreturn rvdef decompress_zip(src_file, dest_dir):"""Decompress .zip file into destination folder"""rv = (True, '')try:zip_file = zipfile.ZipFile(src_file)for name in zip_file.namelist():zip_file.extract(name, dest_dir)zip_file.close()except Exception as e:rv = (False, e)return rvreturn rvdef decompress_gz(src_file, dest_dir):"""Decompress .gz file into destination folder"""rv = (True, "")try:fname = dest_dir + '/' + os.path.basename(src_file)gfile = gzip.GzipFile(src_file)open(fname, "w+").write(gfile.read())gfile.close()except Exception as e:rv = (False, e)return rvreturn rvdef decompress(src_file, dest_dir):fname, ext = os.path.splitext(src_file)if ext in ('.tgz', '.tar'):decompress_tar_and_tgz(src_file, dest_dir)elif ext == '.zip':decompress_zip(src_file, dest_dir)        elif ext == '.rar':decompress_rar(src_file, dest_dir)elif ext == '.gz':decompress_gz(src_file, dest_dir)def decompress_folder(src_dir):files = os.listdir(src_dir)for fname in files: # fname is file name with extensionname, ext = os.path.splitext(fname) # name is file name without extensionsrc_file = os.path.join(src_dir, fname)dest_path = os.path.join(src_dir, name)if not os.path.exists(dest_path):os.mkdir(dest_path)decompress(src_file, dest_path)print(src_file, 'was decompressed.')if __name__ == '__main__':src_dir = r'D:\some_folder_name'decompress_folder(src_dir)

利用 winrar 软件进行解压

winrar 提供命令行解压,Python 语言可以调用 winrar 命令。在执行命令之前,把 winrar.exe 所在的路径加到环境变量。然后,比如,我们要把 D:\test 下所有 zip 文件解压,可以用下面的命令:

winrar.exe x D:\test\*.zip D:\test\unzip\

winrar 的命令行参数很多,这里不展开,x 表示使用绝对路径进行解压。Python 对 winrar 命令进行封装的代码如下:

import osdef unzip_folder(sourcepath):if sourcepath[-1:] == "\\":files = sourcepath + "*.zip"else:files = sourcepath + "\\" + "*.zip"dest = sourcepath + "\\unzip\\"cmd = 'WinRAR.exe x {} {}'.format(files, dest)os.system(cmd)  if __name__ == "__main__":source_folder = r"D:\test\\"unzip_folder(source_folder)

参考:Python解压常见格式的压缩文件

5、zip和rar文件格式

根据文件头判断文件格式

参考:压缩包Zip格式详析(全网最详细)
参考:RAR文件格式学习(了解)


http://www.ppmy.cn/news/696747.html

相关文章

Java解压压缩包(zip/rar/7z)

一、概述 主要实现解压压缩包,拿到压缩包中每个文件。 二、思路 针对压缩包的操作,首先需要拿到压缩包文件的流,然后利用第三方工具将流实例化,调用next方法迭代,然后分别操作压缩包中的单个文件。 三、代码实现 …

压缩文件RAR和ZIP的区别

RAR和ZIP是两种不同的压缩格式,它们使用是不同的压缩算法。ZIP是公开且免费的,很早就有了,可以用于任何用途。RAR是私有的,申请了专利,不公开算法细节,是近年才出来的算法,压缩率比ZIP低&#x…

java解压缩zip、rar

解压缩zip 使用hutool工具包中ZipUtil工具类 <dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.2</version> </dependency>// 参数是压缩包路径和编码 // GBK是为了解决中文解压缩…

压缩——实测rar压缩的各种选项对文件压缩的效果(包括固实压缩)

本文为压缩相关内容的部分内容&#xff0c;如有更新&#xff1a;https://alvincr.com/2021/01/compress-entropy/ 二&#xff1a;压缩选项 1 压缩方式 从存储—>最好&#xff0c;压缩速度依次减慢&#xff0c;但是压缩效果依次增强。 个人测试&#xff1a;为了真实感受一下…

flutter笔记:network_info_plus 模块

flutter实战之常用模块 network_info_plus模块及其应用 - 文章信息 - Author: Jack Lee (jcLee95) Visit me at: https://jclee95.blog.csdn.netEmail: 291148484163.com. Shenzhen ChineAddress of this article:https://blog.csdn.net/qq_28550263/article/details/13141787…

java对压缩文件7z、rar、zip的解压

需求&#xff0c;对Spring传递上来的文件进行解压&#xff0c;分析数据&#xff0c;这是解压模块 <!--apache提供的压缩包依赖--><dependency><groupId>org.apache.commons</groupId><artifactId>commons-compress</artifactId><versio…

华硕(苏研)面经

首先是一个线上测试&#xff0c;具体是一些c语言&#xff0c;逻辑推理以及算法等问题&#xff0c;当时没好好做&#xff0c;以为凉了&#xff0c;但是过了好久突然收到了面试通知。 收到面试通知后让你进行一个性格测试&#xff0c;并完成一个履历表。 然后进行一面&#xff…

C语言学习(三十)---枚举、位段、联合体

这几天在往实习的地方弄东西&#xff0c;比较累&#xff0c;因此没有更新&#xff0c;在几天前我们学习了内存操作函数&#xff0c;其与之前学习的字符串操作函数相比&#xff0c;适用范围更加广泛&#xff0c;大家要注意掌握学习&#xff0c;今天我们将学习枚举、位段和联合体…