【python小工具】批量解压(zip)

摘要

本代码是一个批量解压缩的python代码,为便于使用(不必每次修改代码内容),实现开箱即用的需求,可直接使用bat命令执行。

项目背景

笔者想利用周末时间,进一步提升技术能力,学习一下vue3,学习自然需要资料啦,虽然笔者永远推崇官方文档,但笔者的许多知识都是借助了黑马程序员的资料以及项目学习的,这个也不例外。但是笔者是一个很懒惰的人,怎么可能手动的将这些文件都解压出来嘛?
back

代码实现

首先获取项目的目的地址并且检验遍历当前文件夹的文件
在这里插入图片描述
接着呢也是很常规的便利进行解压

from zipfile import ZipFile
for filename in os.listdir(path):
    zipfile = ZipFile(filename,'r')
    for item in zipfile.namelist():
        zipfile.extract(item, path) 

毫无意外的会报错,这里也是十分显然出现了两个问题。

  1. 代码文件并不是可解压的文件
  2. 有些压缩文件内是一个文件夹,有些则是一系列散的文件(如下图中的assets和Pinia.md)
    在这里插入图片描述
    跳过代码文件十分的轻松:
if(filename.endswith('.ipynb')):continue
if(filename.endswith('.py')):continue

接着编写对内部进行判断的处理:
这里实现了三个逻辑:

  • 如果压缩文件内只有一个同名文件夹,则直接解压缩至当前目录
  • 如果压缩文件内只有一个文件夹,则这个文件夹会被解压至目录并将这个文件夹的名字重命名为与压缩文件相同。举个栗子,day06.zip文件下只有一个名为06day06的文件夹,则这个文件夹会被解压缩至当前目录并重命名为day06
  • 如果压缩文件内不止一个文件,则将其全部解压至目录下与压缩文件同名文件夹下
from zipfile import ZipFile
for filename in os.listdir(path):
    if(filename.endswith('.ipynb')):continue
    zipfile = ZipFile(filename,'r')
    ###################################################
    # 判断压缩文件内是否只有一个文件夹
    flag = False# false表示都在一个文件中
    for item in zipfile.namelist():
        if not item.startswith(zipfile.namelist()[0]):
            flag=True
            break

    if(flag):# 不在同一个
        out_path = os.path.join(path,filename[:-4])
    else:
        out_path = path
    ###################################################
    '''这个是将内部直接解压到同名文件夹下
    if(zipfile.namelist()[0]!=filename[:-4]+'/'):#需要重新创建文件夹
        for item in zipfile.namelist():
            zipfile.extract(item, os.path.join(path,filename[:-4]))
        continue
    '''
    ###################################################
    # 实现解压
    for item in zipfile.namelist():
        zipfile.extract(item, out_path) 
    ###################################################
    # 修改文件夹的名字
    if(filename[:-4]!=zipfile.namelist()[0][:-1] and not flag):#都在一个文件夹中但是名字不同
        os.rename(zipfile.namelist()[0][:-1],filename[:-4])
    
    zipfile.close()

可以看到成功解压完成了
在这里插入图片描述

“部署”

将代码放入py文件并写一个txt文件:python ./xxxxxxx.py将其改名为.bat
之后只要将其放到想解压的文件夹下就可以自动解压文件夹内所有压缩文件啦。
完整代码

import os
path = os.getcwd()
from zipfile import ZipFile
for filename in os.listdir(path):
    if(not filename.endswith('.zip')):continue
    zipfile = ZipFile(filename,'r')
    flag = False# false表示都在一个文件中
    for item in zipfile.namelist():
        if not item.startswith(zipfile.namelist()[0]):
            flag=True
            break
    
    if(flag):# 不在同一个
        out_path = os.path.join(path,filename[:-4])
    else:
        out_path = path
    '''这个是将内部直接解压到同名文件夹下
    if(zipfile.namelist()[0]!=filename[:-4]+'/'):#需要重新创建文件夹
        for item in zipfile.namelist():
            zipfile.extract(item, os.path.join(path,filename[:-4]))
        continue
    '''
    # print(out_path)
    # 实现解压
    for item in zipfile.namelist():
        zipfile.extract(item, out_path) 

    if(filename[:-4]!=zipfile.namelist()[0][:-1] and not flag):#都在一个文件夹中但是名字不同
        os.rename(zipfile.namelist()[0][:-1],filename[:-4])
    
    zipfile.close()

优化

上述代码呢只能解压zip文件,但是日常中肯定不止这些,像7z,rar很多类型都不支持这样解压。笔者通过直接用python调用了winrar里的可执行文件进行解压成功了,但是相信这肯定不是最优的方式,查阅资料呢也是发现py7zr库可以很方便的解决,至于逻辑那肯定是差不多的,代码就等用到再改叭😁

批量解压zip文件Python提供了很多的库,包括zipfile、shutil和os等。下面我介绍一下使用这些库完成批量解压任务的步骤。 1. 导入库 首先需要导入zipfile、os和shutil三个库。zipfile库提供了解压缩包的方法,可以很方便地进行解压操作;os库提供了文件操作的方法,可以获取文件路径和创建文件夹等操作;shutil库提供了复制和移动文件等操作。 ``` import zipfile import os import shutil ``` 2. 定义解压函数 接下来我们需要定义一个函数来完成解压任务。这个函数接收一个zip文件路径和解压路径作为参数。 ``` def unzip_file(zip_path, unzip_path): # 打开zip文件 zip_file = zipfile.ZipFile(zip_path) # 创建解压文件夹 os.makedirs(unzip_path, exist_ok=True) # 遍历压缩包中的文件列表 for names in zip_file.namelist(): # 获取文件的绝对路径 zip_file.extract(names, unzip_path) # 关闭zip文件 zip_file.close() ``` 3. 循环处理zip文件 最后,我们需要使用os库来遍历指定目录下的zip文件。根据文件后缀名为.zip的特征,我们可以使用字符串的.endswith()方法来判断。 ``` # 指定文件夹路径 path = 'path/to/zipfiles' # 循环处理zip文件 for file in os.listdir(path): # 判断文件后缀是否为.zip if file.endswith('.zip'): # 拼接文件路径 file_path = os.path.join(path, file) # 定义解压后的文件夹路径 unzip_path = os.path.join(path, file[:-4]) # 调用函数解压文件 unzip_file(file_path, unzip_path) ``` 这样就完成了批量解压zip文件的任务。大家可以根据自己的需要,对函数进行修改和优化,实现更加灵活和高效的解压方式。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值