【Python脚本】使用Python解压zip、rar文件

这篇具有很好参考价值的文章主要介绍了【Python脚本】使用Python解压zip、rar文件。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、解压 zip 文件

基本解压操作

import zipfile

'''
基本格式:zipfile.ZipFile(filename[,mode[,compression[,allowZip64]]])
mode:可选 r,w,a 代表不同的打开文件的方式;r 只读;w 重写;a 添加
compression:指出这个 zipfile 用什么压缩方法,默认是 ZIP_STORED,另一种选择是 ZIP_DEFLATED;
allowZip64:bool型变量,当设置为True时可以创建大于 2G 的 zip 文件,默认值 True;

'''
zip_file = zipfile.ZipFile(path)
zip_list = zip_file.namelist() # 得到压缩包里所有文件

for f in zip_list:
    zip_file.extract(f, folder_abs) # 循环解压文件到指定目录
 
zip_file.close() # 关闭文件,必须有,释放内存

其他方法

zipfile.is_zipfile('xxx.zip') # 判断文件是否是个有效的zipfile
zipfile.namelist('xxx.zip') # 列表,存储zip文件中所有子文件的path(相对于zip文件包而言的)
zipfile.infolist('xxx.zip') # 列表,存储每个zip文件中子文件的ZipInfo对象
zipfile.printdir() # 打印输出zip文件的目录结构,包括每个文件的path,修改时间和大小
zipfile.open(name[,mode[,pwd]]) # 获取一个子文件的文件对象,可以对其进行read,readline,write等操作
zipfile.setpassword(psw),为zip文件设置默认密码
zipfile.testzip() # 读取zip中的所有文件,验证他们的CRC校验和。返回第一个损坏文件的名称,如果所有文件都是完整的就返回None
zipfile.write(filename[,arcname[,compression_type]]) # 将zip外的文件filename写入到名为arcname的子文件中(当然arcname也是带有相对zip包的路径的),打开方式为w或a
zipfile.extract(member, path=None, pwd=None) # 解压一个zip中的文件,path为解压存储路径,pwd为密码
zipfile.extractall(path[,pwd]) # 解压zip中的所有文件,path为解压存储路径,pwd为密码

二、解压rar文件

Python 本身不支持 rar 文件的解压,需要先安装相关依赖才可使用

1.使用rarfile解压rar文件

pip3 install rarfile 安装rarfile库

(注意是解压,压缩这个方法不支持)

#coding=utf-8
import rarfile
path = "E:\\New\\New.rar"
path2 = "E:\\New"
 
rf = rarfile.RarFile(path)         #待解压文件
rf.extractall(path2)               #解压指定文件路径
rf.extractall(path2,pwd=password)               #指定密码
rf.close()

压缩包中存在多个文件时,可以使用for循环进行批量解压

rf = rarfile.RarFile(_rarfile, mode='r') # mode的值只能为'r'
rf_list = rf.namelist() # 得到压缩包里所有的文件
print('rar文件内容', rf_list)

for f in rf_list:
    rf.extract(f, folder_abs)  # 循环解压,将文件解压到指定路径
# 一次性解压所有文件到指定目录
# rf.extractall(path) # 不传path,默认为当前目录

2、使用unrar解压 rar 文件

  • 安装 unrar 模块:pip install unrar
  • 下载安装 unrar library,网址:http://www.rarlab.com/rar/UnRARDLL.exe 按照默认安装路径安装
  • 将安装后文件夹中的 X64 文件夹加入环境变量(默认路径为 C:\Program Files (x86)\UnrarDLL\x64)
  • 系统变量中新建变量,变量名输入 UNRAR_LIB_PATH,变量值为 C:\Program Files(x86)\UnrarDLL\x64\UnRAR64.dll(32位系统下的变量值为C:\Program Files
    (x86)\UnrarDLL\UnRAR.dll)
  • 将 winrar 的目录下的 unrar.exe 复制到 Python 路径的Scripts 文件夹下
  • 重启Python编辑器使环境变量生效

3、调用winrar来解压 rar 文件

当上述方法无效时,可以采用os.system执行cmd命令的方式,调用winrar来进行解压。以下是递归解压文件夹实例文章来源地址https://www.toymoban.com/news/detail-745655.html

import os
import shutil

# 解压缩rar到指定文件夹
# def extractRar(zfile, path, pwd):
#     # rar_command1 = "C:\Program Files\WinRAR\WinRAR.exe x -ibck %s %s -p%s" % (zfile, path)
#     # rar_command2 = r'"C:\Program Files\WinRAR\WinRAR.exe" x -ibck %s %s -p%s' % (zfile, path, pwd)
#     os.system(rar_command2)
# extractRar('flag.rar', '', '-')

path = '.'
filename = 'flag.rar'
passwd = '-'
desdir = '.'

def unrarfile(path, zfile, passwd):
    # 拼装目标文件
    filePath = os.path.join(path, zfile)
    # for fp in os.listdir(path):
    #     if fp[-3:] == 'rar':
    # 执行解压命令        
    rar_command2 = r'"C:\Program Files\WinRAR\WinRAR.exe" x -ibck %s %s -p%s' % (filePath, desdir, passwd)
    r = os.system(rar_command2)
    print(r)

    # 递归删除解压出来的文件夹
    if path != '.':
        print(path)
        shutil.rmtree(path)

    # 查询最新解压出来的文件夹,及其内部文件
    for fp2 in os.listdir(desdir):
        if os.path.isdir(fp2):
            # 文件夹名称就是密码
            passwd = fp2
            # print(passwd)

            # 拼装新的目标文件夹
            path = os.path.join(desdir,passwd)
            # 读取新的目标文件
            zfile = os.listdir(path)[0]

    # 递归解压
    unrarfile(path,zfile,passwd)
unrarfile(path,filename, passwd)

到了这里,关于【Python脚本】使用Python解压zip、rar文件的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • .net rar zip压缩包解压

    引入  SharpCompress https://download.csdn.net/download/weixin_42020830/87737306 string targetFile=\\\"c:\\\\test.zip\\\"; string zipFile=\\\"c:\\\\test\\\";  using (Stream stream =System.IO.File.OpenRead(targetFile))                     {                         var reader = ReaderFactory.Open(stream);                         while (r

    2024年02月01日
    浏览(46)
  • QT 利用开源7z 实现解压各种压缩包,包括进度条和文件名的显示(zip,7z,rar,iso等50多种格式)

            想做一个winRAR一样的解压软件吗?很简单,利用开源的7z库就能实现。我看网上其他人说的方法不敢苟同,误人子弟。以前自己在项目中使用过7z,这次又有需要,就想记录下来。如果你研究过如何用7z的话,一定知道7z的每一个GUID都代表了一种格式,50多种GUID也就有

    2024年02月04日
    浏览(51)
  • Linux中_使用tar_gzip_zip_rar_命令_打包和解包_压缩和解压

    1.3.1、到当前目录下 1.3.2、到指定目录下 3.1.1、压缩当前目录: 3.1.2、压缩指定目录: 3.2.1、到当前目录 3.2.2、到指定目录 4.2.1、压缩文件本身: 4.2.2、递归压缩,将指定目录下所有文件和子目录一并压缩:

    2024年02月04日
    浏览(58)
  • python 解压指定目录的所有zip文件

    ========================================================== 修改了一下!!!递归所有文件夹里面的zip 附件为,打包好的exe,可以直接执行。(https://download.csdn.net/download/li13148023/88492399)

    2024年02月06日
    浏览(39)
  • 【ubuntu】详解解压命令(.tar、.gz、.tar.gz、.bz2、.tar.bz2、.zip、.rar等)

    目录 *.tar 文件 *.tar.gz 和 *.tgz 文件 *.gz 文件 *.bz2 文件 *.tar.bz2 文件 *.zip 文件 *.rar 文件      

    2024年02月16日
    浏览(61)
  • 【python】 循环解压zip格式

    import zipfile,os,pyzipper path = r\\\'C:UsersLenovoDesktop2\\\'                #循环解压桌面上\\\"2\\\"文件夹内的zip格式压缩包 def x():         #一次解压、提取、删除     for i in os.listdir(path):         if \\\'.zip\\\' in i:             route = os.path.join(path,i)             z

    2023年04月17日
    浏览(32)
  • centos如何解压rar格式文件

    链接: link 命令如下: ** (以下为拓展,可跳过) ** 1、打包.tar.gz文件:(打包文件到某目录) 2、解压.tar.gz文件到当前目录 3、解压.tar.gz文件到指定目录 出现如下提示即表示编译成功。

    2024年02月11日
    浏览(57)
  • 在Ubuntu上解压RAR格式文件

    在Ubuntu操作系统上,你可以使用一些工具来解压RAR格式的文件。RAR是一种常见的压缩文件格式,通常用于在Windows系统中创建和分享压缩文件。然而,Ubuntu默认情况下并不支持RAR格式的解压缩,因此你需要安装额外的软件来处理这些文件。 在Ubuntu上,你可以使用一个名为\\\"unr

    2024年02月04日
    浏览(55)
  • Java解压RAR文件的几种方式

    2024年02月16日
    浏览(54)
  • 使用@zip.js/zip.js与naive-ui的Tree组件实现在线文件解压预览

    用于压缩和解压缩文件的 JavaScript 库 支持Zip64 格式 支持WinZIP AES和 PKWare ZipCrypto 加密 支持同时读取和写入一个或多个 zip 文件 集成工作池管理器 无第三方依赖 该库依赖于Promise、TypedArray、 Streams API 以及以下可选的 API: Web Workers Compression Streams Web Crypto 该库与最新版本的

    2024年02月19日
    浏览(48)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包