文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

Python实现rar、zip和7z文件的压缩和解压

2023-09-20 15:15

关注

一、7z压缩文件的压缩和解压

1、安装py7zr

我们要先安装py7zr第三方库:

pip install py7zr

如果python环境有问题,执行上面那一条安装语句老是安装在默认的python环境的话,我们可以执行下面这条语句,将第三方库安装在项目的虚拟环境中:

pip install py7zr --target=E:\Python脚本\作业查重\OS_Study\venv\Lib\site-packages

2、解压7z文件

import py7zr# 将压缩文件解压到指定目录def decompress_7z():# 将要解压的压缩文件路径    archive = py7zr.SevenZipFile(r'E:\Python脚本\作业查重\20大数据班Javaweb新闻系统.7z', mode='r')    # 压缩文件的解压目录    archive.extractall(path=r'E:\Python脚本\作业查重\20大数据班Javaweb新闻系统')    archive.close()

3、压缩成7z文件

import py7zr# 将指定目录压缩到指定压缩文件test.7z'def compression_7z():# 生成的压缩文件路径    archive = py7zr.SevenZipFile(r'E:\Python脚本\作业查重\test.7z', mode='w')    # 需要压缩的压缩文件    archive.writeall(path=r'../test')    archive.close()

二、rar压缩文件的压缩和解压

1、环境准备

我们用到的第三方库为rarfile,因为我们的这个第三方库需要用到第三方程序,所以我们要先配一下环境。

(1)导入unrar模块:

pip install unrar

(2)下载 unrar library 并按照默认安装路径安装,下载链接:下载

(3) 编辑环境变量:

用户变量 -> 变量名: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]

(4)安装winrar(360软件中心有):
winrar 的目录下的 unrar.exe 复制到 Python 路径的 Scripts 文件夹下。
(5)重启Pycharm

2、安装rarfile

执行以下命令:

pip install rarfile

3、解压rar文件

import rarfiledef decompress_rar():# 找到rar文件    z = rarfile.RarFile(r'E:\Python脚本\作业查重\2015090103石凯-新闻管理系统.rar')      # 指定解压输出的目录    z.extractall(r'E:\Python脚本\作业查重\2015090103石凯-新闻管理系统')      z.close()    # 删除压缩文件    # os.remove(pathRar)

4、压缩成rar文件

由于rarfile只能解压文件不能压缩文件,所以我们需要调用第三方程序来完成。

def compress(input_file, output_file, root_path,        rar_path='D:/"Program Files"/WinRAR/WinRAR.exe'):    """    调用CMD命令压缩文件/文件夹    Parameters    ----------    input_file : 需要压缩的文件/文件夹名。从哪一级目录开始,就会从哪一级开始压缩;    output_file : 压缩文件的输出路径及其压缩的文件名;        可以是.rar, .zip;    root_path: input_file 所在目录;    rar_path : WinRAR软件的安装路径,        The default is 'C:/"Program Files"/WinRAR/WinRAR.exe'.            NOTE: 路径和文件名中带空格的时候一定要多加一重引号!!    """    cmd_command = r'%s a %s %s' % (rar_path, output_file, input_file)    print(root_path)    os.chdir(root_path) # 切换工作目录    print(cmd_command)    os.system(cmd_command)        if os.system(cmd_command)==0:        print('Successful backup to', output_file)    else:        print('Backup FAILED', input_file)  def rar(paths):    files = os.listdir(paths)    for path in files:        input_file = '"' + path + '"'        out = path.split('.')[0] + '_bak.rar'        out_file = '"' + out + '"'        print(path)        print(out)        compress(input_file,out_file,paths)

参考文章:https://blog.csdn.net/hanmengaidudu/article/details/120193682

三、zip文件的压缩和解压

1、安装zipfile

执行以下命令:

pip install zipfile

2、解压zip文件

使用zipfileextract()extractall()方法直接解压时,文件名可能会出现乱码,所以我们要特别解决这个问题:

# 出现乱码时解码def recode(raw: str) -> str:    try:        return raw.encode('cp437').decode('gbk')    except:        return raw.encode('utf-8').decode('utf-8')# 解压zip文件def decompress_zip(pathZip, obj):    zipFile = zipfile.ZipFile(pathZip)  # 压缩包路径    zipFileList = zipFile.namelist()  # 获取压缩包里所有文件    print('-------------------正在解压-----------------------')    for f in zipFileList:        zipFile.extract(f, obj)  # 循环解压文件到指定目录        name1 = os.path.join(obj, f)  # 乱码文件名        name2 = os.path.join(obj, recode(f))  # 解码后文件名        os.rename(name1, name2)  # 文件重命名    zipFile.close()  # 关闭文件释放内存    print('-------------------解压完成-----------------------')    # 删除压缩文件    # os.remove(pathZip)

3、压缩成zip文件

参考文章:https://blog.csdn.net/Likianta/article/details/126710855

参考文章:https://blog.csdn.net/ooowwq/article/details/125949394

参考 文章:https://blog.csdn.net/qq_36182112/article/details/127630950

四、批量解压

如果想要实现批量解压某个目录下的全部压缩包的话,可以配合python自带的od库来实现,一些参考代码如下:

# 批量解压文件def batch_decompress():    file_names = os.listdir(r'E:\Python脚本\作业查重\20大数据班Javaweb新闻系统')  # 压缩文件所在的目录    # print(file_names)    print('-------------------正在解压-----------------------')    for file_name in file_names:        # 将文件名与目录拼接起来,得到文件绝对路径地址        path_name = os.path.join(r'E:\Python脚本\作业查重\20大数据班Javaweb新闻系统', file_name)        print(path_name)        if path_name[path_name.find('.')+1:] == 'zip':            decompress_zip(path_name)        elif path_name[path_name.find('.')+1:] == 'rar':            decompress_rar(path_name)        else:            decompress_7z(path_name)    print('-------------------解压完成-----------------------')

来源地址:https://blog.csdn.net/qq_47188967/article/details/129735758

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-后端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯