python 解压zip rar 7z文件

article/2025/10/21 12:13:14

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://chatgpt.dhexx.cn/article/4dr994wt.shtml

相关文章

c++实现压缩解压 zip文件

前言 由于博主需要写软件工程的课设,在没有好点子以及考虑到队友能力不足的情况下,决定写一个zip压缩解压。 我使用了Zip Utils实现这一想法,而我的代码则是对Zip Utils的封装,具体压缩和解压由Zip Utils实现。 画线的文件为Zip …

aistudio解压zip

最近整软件杯,在aistudio上传数据跑代码,还在上传数据阶段,好像太大的包只能一个一个上传,图片啥的只能上传五个,就很离谱呀 方法一: 这样可以直接解压到本地目录 方法二: 百度看了一下可以…

【ubuntu】ubuntu 如何解压zip文件

目录 1、安装 unzip 2、解压 1、安装 unzip sudo apt-get install unzip 2、解压 unzip 文件命.zip

cmd解压zip文件

自动化脚本执行过程中需要分析log,遇到压缩文件时需要先将文件解压,Ubuntu系统自带解压缩,但windows需要自己下载配置,以下是Windows系统中安装使用解压缩的方法: 一.安装 1、下载unzip安装包:http://gnuwin32.sourcef…

java解压zip文件

zip文件目录结构如下: 其中,word下面还有多个子目录,可以递归进行解压目录,核心代码如下: package com.atguigu.common.utils;import java.io.File; import java.io.FileOutputStream; import java.io.IOException; i…

Linux 解压 zip 分卷

对于一个大的文件,使用分卷压缩得到如下文件: 传到Linux目录下,希望解压出来,需要使用zip -F命令修复分卷,从而合成正确的一个压缩文件 zip -F UCF-101.zip --out ucf101.zip得到 ucf101.zip,然后解压 uc…

java解压zip压缩包

坐在旁边的小伙伴问我怎么用 java 将服务器上的压缩文件解压出来,我索性给他写了个 demo ,也顺手记录一下。亲测可用,如果觉得有帮助,欢迎点赞,评论,收藏,转发 java 实现解压 zip 压缩包 packag…

【方法】ZIP分卷压缩文件如何解压?

有时候文件太大,我们在压缩ZIP文件时会使用分卷压缩。 那后期想要解压ZIP分卷文件,要如何解压呢?不清楚的小伙伴,可以跟着小编来看看哦。 在解压ZIP分卷压缩文件之前,要先确保所有的分卷压缩包都存放在一个文件夹里&…

Btrace安装步骤[详细]

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 Btrace安装步骤 一、下载地址二、配置环境变量1.添加home2.加到Path里3.尝试启动4.Windows查看pid进程号 一、下载地址 我用的是最新版本 V2.2.1 下载地址: https://github.…

【性能跟踪】btrace学习一--安装btrace

最近公司里为了监控线上的类,方法的执行时间,结果等用到了这个开源的小工具,自己也学习了下,感觉比较简单,但是还是挺实用的。 这里做个学习笔记。 1.首先到网上下个Btrace包吧,官方网址是:htt…

重要升级!btrace 2.0 技术原理大揭秘

‍ 动手点关注 干货不迷路 项目 GitHub 地址:https://github.com/bytedance/btrace 背景介绍 在一年多前,我们对外正式开源了 btrace(AKA RheaTrace),它是基于 Systrace 的高性能 Trace 工具,目前字节跳动已…

BTrace安装和使用

一、 安装JDK(需要安装jdk7及以上版本) jdk-7u80-linux-x64.tar.gz 二、 安装BTrace 1)下载地址:https://github.com/btraceio/btrace/releases/tag/v1.3.8.3-1 2)解压缩 在当前用户目录下新建btrace目录&#…

BTrace分析和使用

BTrace分析和使用 一、 BTrace简介 BTrace是一个为Java平台开发的安全、动态的追踪工具。BTrace动态地向目标应用程序的字节码注入Java追踪代码(字节码追踪)。 GitHUB地址https://github.com/btraceio/btrace。 原理为将字节码发送到应用&#xff…

BTrace入门

BTrace入门 概念性的东西自行网上查阅吧。 安装 现在btrace项目已经迁移到了github上了。这点可以从官网( https://kenai.com/projects/btrace/downloads/directory/releases/latest )上看出。 点开这个链接就会跳转到btrace项目的github地址&#x…

(转)btrace使用

Btrace 是一个安全,可以动态跟踪 java 程序的一种工具。他的操作不会对原有 java 进程产生影响,不用关闭正在运行的 java 进程,也不会修改 java 进程中的逻辑和数据。因此,也就成为我们线上跟踪生产代码的有力工具! 之前 Btrace 只…

【性能跟踪】btrace学习二--btrace一个简单例子

btrace安装好了,就看一些语法吧。可以到btrace的官方帮助文档中去看,基本上就可以http://kenai.com/projects/btrace/pages/UserGuide 【注:你本地的jdk要是1.6及以上才行,1.5可是不支持的】 下面以一个例子来说明: 新…

btrace 开源!基于 Systrace 高性能 Trace 工具

介绍 btrace(又名 RheaTrace) 是抖音基础技术团队自研的一款高性能 Android Trace 工具,它基于 Systrace 实现,并针对 Systrace 不足之处加以改进,核心改进点如下。 效率提升:编译期间为 App 方法自动注入自…

BTrace简介与使用说明

目录 前言 简介 安装 下载BTrace 配置BTRACE_HOME BTrace使用 注意事项 BTrace注解 ProbeClassName ProbeMethodName Self Return Duration TargetInstance TargetMethodOrField OnMethod OnTimer OnError OnEvent 在jvisualvm中使用BTrace BTraceUtils方法介绍 前言 大家在…

Btrace使用入门

目录 1.什么是BTrace 2.BTrace使用场景 BTrace可以做什么? 3.使用限制 4.使用方法及样例 4.1使用方法 4.2使用样例 2.查看哪些方法调用了 System.gc() ,调用栈是怎样的 3.打印某个类中某一方法的入参和返回值 5.拦截方法定义 定位方法 拦截时…

黄油刀ButterKnife的使用

1、ButterKnife是一个专注于Android系统的View注入框架,以前总是要写很多findViewById来找到View对象,有了ButterKnife可以很轻松的省去这些步骤。是大神JakeWharton的力作,目前使用很广。最重要的一点,使用ButterKnife对性能基本没有损失&am…