Python实现批量压缩解压文件(zip、rar)

 更新时间:2023年09月05日 11:50:02   作者:RS迷途小书童  
Python是一种广泛使用的编程语言,非常适合处理各种任务,包括批量解压缩文件,本文主要介绍了Python实现批量压缩解压文件,具有一定的参考价值,感兴趣的可以了解一下

好长一段时间没有更新了,最近手里的项目没停过太忙了。今天正好有空就分享下之前编写的一段代码。

起因是因为我想将一些文件上传至网盘,但奈何太穷开不起会员,无法上传超过4G的文件。于是就想能不能使用Python实现批量压缩文件夹,搞都搞了顺便将解压文件夹也写出来了。今天就和大家分享一下。

一、导入相关库

os库是为了监测生成的文件夹是否已存在。主要的库是zipfile,它提供了有关windows下的文件/文件夹的压缩、解压的函数。

import os
import zipfile

二、压缩文件

今天偷个懒,就不一段一段的去解释了,直接整个函数展示。相关的注释已经写清楚了,主要函数就是zipfile.ZipFile和zip_file.write。zip_file.write(file_path,file_each)中,file_path是文件夹中文件的完整路径,file_each是文件名。

def Compress_path_zip(path_all):
    path_all_list = os.listdir(path_all)
    # 列出总文件夹内所有需要压缩的文件夹
    for path_each in path_all_list:
        path_compress = os.path.join(path_all, path_each)
        # 待压缩的绝对路径
        if os.path.isdir(path_compress):
            print("正在压缩:%s" % path_each)
            # 遍历所有需要压缩的文件夹
            if os.path.exists(path_all + "%s.zip" % path_each):
                print(path_all + "%s1.zip" % path_each+"已存在,新文件名为'%s'" % (path_all + "%s1.zip" % path_each))
                zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
                # 创建的压缩对象用于执行后续操作
                # file_list = zip_file.namelist()
                # 列出压缩文件夹中所有文件
            else:
                zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
            file_list = os.listdir(path_compress)
            # 待压缩文件夹内所有文件
            # zip_file.setpassword(b'123')
            for file_each in file_list:
                # 遍历所有文件夹内的文件
                file_path = os.path.join(path_compress, file_each)
                zip_file.write(file_path, file_each)
            zip_file.close()
        else:
            print(path_each, "不是文件夹,不进行压缩")
            continue

三、解压文件

这段代码就不细说了,反正修改了路径就能直接使用了。

def Decompress_path_zip(path_all):
    path_all_list = os.listdir(path_all)
    for path_each in path_all_list:
        # 遍历所有需要压缩的文件夹
        if path_each.endswith('.zip'):
            print("正在解压:%s" % path_each)
            path_decompress = os.path.join(path_all, path_each)
            zip_file = zipfile.ZipFile(path_decompress, 'r')  # 压缩文件位置
            for file in zip_file.namelist():
                if os.path.exists(path_decompress[:-4]):
                    print("'%s'" % path_decompress[:-4], "已存在,新文件名为'%s'" % (path_decompress[:-4] + "1"))
                    zip_file.extract(file, path_decompress[:-4] + "1")  # 解压位置,pwd="1234".encode('utf-8')
                else:
                    zip_file.extract(file, path_decompress[:-4])  # 解压位置
            zip_file.close()
        else:
            print(path_each, "非zip文件,不进行解压!")
            continue

四、完整代码

# -*- coding: utf-8 -*-
"""
@Time : 2023/8/28 14:47
@Auth : RS迷途小书童
@File :Compress and Decompress Folders.py
@IDE :PyCharm
@Purpose:批量压缩/解压文件夹
"""
import os
import zipfile
def Compress_path_zip(path_all):
    path_all_list = os.listdir(path_all)
    # 列出总文件夹内所有需要压缩的文件夹
    for path_each in path_all_list:
        path_compress = os.path.join(path_all, path_each)
        # 待压缩的绝对路径
        if os.path.isdir(path_compress):
            print("正在压缩:%s" % path_each)
            # 遍历所有需要压缩的文件夹
            if os.path.exists(path_all + "%s.zip" % path_each):
                print(path_all + "%s1.zip" % path_each+"已存在,新文件名为'%s'" % (path_all + "%s1.zip" % path_each))
                zip_file = zipfile.ZipFile(path_all + "%s1.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
                # 创建的压缩对象用于执行后续操作
                # file_list = zip_file.namelist()
                # 列出压缩文件夹中所有文件
            else:
                zip_file = zipfile.ZipFile(path_all + "%s.zip" % path_each, 'w', zipfile.ZIP_DEFLATED, allowZip64=True)
            file_list = os.listdir(path_compress)
            # 待压缩文件夹内所有文件
            # zip_file.setpassword(b'123')
            for file_each in file_list:
                # 遍历所有文件夹内的文件
                file_path = os.path.join(path_compress, file_each)
                zip_file.write(file_path, file_each)
            zip_file.close()
        else:
            print(path_each, "不是文件夹,不进行压缩")
            continue
def Decompress_path_zip(path_all):
    path_all_list = os.listdir(path_all)
    for path_each in path_all_list:
        # 遍历所有需要压缩的文件夹
        if path_each.endswith('.zip'):
            print("正在解压:%s" % path_each)
            path_decompress = os.path.join(path_all, path_each)
            zip_file = zipfile.ZipFile(path_decompress, 'r')  # 压缩文件位置
            for file in zip_file.namelist():
                if os.path.exists(path_decompress[:-4]):
                    print("'%s'" % path_decompress[:-4], "已存在,新文件名为'%s'" % (path_decompress[:-4] + "1"))
                    zip_file.extract(file, path_decompress[:-4] + "1")  # 解压位置,pwd="1234".encode('utf-8')
                else:
                    zip_file.extract(file, path_decompress[:-4])  # 解压位置
            zip_file.close()
        else:
            print(path_each, "非zip文件,不进行解压!")
            continue
if __name__ == "__main__":
    path = "G:/try/"
    # Compress_path_zip(path)
    Decompress_path_zip(path)

本来是想将压缩加密文件和解压加密文件写出来的,结果zipfile库好像不支持加密文件,所以就没写。虽然解压加密文件可以,但是很呆,因为只有使用传统加密的zip文件,才可以使用密码解压,不是传统加密的就算密码正确他也不解压,所以就都不写啦。大家如果想用的话,直接修改路径就行。

到此这篇关于Python实现批量压缩解压文件(zip、rar)的文章就介绍到这了,更多相关Python 批量压缩解压文件内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • python针对不定分隔符切割提取字符串的方法

    python针对不定分隔符切割提取字符串的方法

    今天小编就为大家分享一篇python针对不定分隔符切割提取字符串的方法,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2018-10-10
  • python推导式的使用方法实例

    python推导式的使用方法实例

    这篇文章主要给大家介绍了关于python推导式的使用方法,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2021-02-02
  • 自动化测试时基于Python常用的几个加密算法总结

    自动化测试时基于Python常用的几个加密算法总结

    这几天做自动化测试,遇到一个问题,那就是接口的请求的密码是加密的,产品的要求是不能使用使用其他特殊手段,他给提供加密算法,需要在接口请求的时候,使用加密算法处理后的数据传参,本文主要是整理了几个加密算法,以便后续测试使用,需要的朋友可以参考下
    2023-12-12
  • 如何将python脚本打包为exe可执行文件

    如何将python脚本打包为exe可执行文件

    这篇文章主要介绍了如何将python脚本打包为exe可执行文件问题,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教
    2023-11-11
  • 详解如何使用Python实现过滤指定进程

    详解如何使用Python实现过滤指定进程

    Python提供了多种方式来实现对进程的过滤和操作,本文将介绍如何利用Python来过滤指定进程,并展示一些实用的技巧和方法,希望对大家有所帮助
    2024-04-04
  • Python笔记之观察者模式

    Python笔记之观察者模式

    这篇文章主要为大家详细介绍了Python笔记之观察者模式,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2019-11-11
  • python中的*与**用法示例详解

    python中的*与**用法示例详解

    这篇文章主要介绍了python中*与**用法的相关资料,Python中的*和**用于数值计算、序列解包、函数定义和调用,*用于乘法和解包序列,**用于乘方、解包字典和扩展字典,需要的朋友可以参考下
    2025-01-01
  • anaconda安装后打不开解决方式(亲测有效)

    anaconda安装后打不开解决方式(亲测有效)

    Anaconda是一个和Canopy类似的科学计算环境,但用起来更加方便,下面这篇文章主要给大家介绍了关于anaconda安装后打不开解决的相关资料,文中通过图文介绍的非常详细,需要的朋友可以参考下
    2022-09-09
  • 利用python中的matplotlib打印混淆矩阵实例

    利用python中的matplotlib打印混淆矩阵实例

    这篇文章主要介绍了利用python中的matplotlib打印混淆矩阵实例,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
    2020-06-06
  • python中列表推导式与生成器表达式对比详解

    python中列表推导式与生成器表达式对比详解

    python当然不是一门编译型语言,但是它还是要被解析成二进制的字节码才能被执行,执行它的正是python解释器,下面这篇文章主要给大家介绍了关于python中列表推导式与生成器表达式对比的相关资料,需要的朋友可以参考下
    2023-01-01

最新评论