首页 > 其他分享 >对某网站的批量解压(需要把同一类压缩包统一命名)

对某网站的批量解压(需要把同一类压缩包统一命名)

时间:2023-12-26 14:45:16浏览次数:22  
标签:解压 批量 zip 文件夹 dir file Path path 压缩包

在每次运行程序前,要求用户输入一个"目标目录"。 “目标目录”下里有很多压缩包(zip),压缩包的名称大概是:袋装狗粮 (1).zip, 袋装狗粮 (2).zip, 袋装狗粮 (3).zip, 袋装狗粮 (4).zip,猫罐头 (1).zip,猫罐头 (2).zip,英式早餐.zip 等。 这些压缩包里装了很多图片。 这里"袋装狗粮"视为一类,"猫罐头"视为一类,“英式早餐”视为一类。(忽略数字后缀以及文件扩展名,前面的名称相同的可视为一类。)(“袋装狗粮”,“猫罐头”以及“英式早餐”这里为类名称) 每检测到一类,则在“目标目录”下建立一个新的文件夹,文件夹命名为该类名称,(如袋装狗粮),如果已经存在该类名称的文件夹,则跳过。 将相同类的压缩包的统一解压到该类的文件夹中,如果解压过程中发现有重复图片文件,则跳过该图片。 程序结束后,遍历“目标目录”下所有的文件夹类型(考虑文件夹嵌套),删除其下面所有空的子文件夹。

import os
import zipfile
from pathlib import Path

def is_image(file_name):
    # 检查文件是否为图片
    return file_name.lower().endswith(('.png', '.jpg', '.jpeg', '.gif', '.bmp'))

def remove_empty_folders(path):
    # 递归删除空文件夹
    if not path.is_dir():
        return

    # 如果文件夹为空,则删除它
    if not any(Path(path).iterdir()):
        path.rmdir()
        print(f"删除空文件夹: {path}")
        return

    # 否则递归检查其子文件夹
    for subpath in Path(path).iterdir():
        if subpath.is_dir():
            remove_empty_folders(subpath)

def main():
    # 请求用户输入目标目录
    target_dir = input("请输入目标目录: ")

    # 确保目标目录存在
    if not os.path.exists(target_dir):
        print("指定的目录不存在,请检查后重试。")
        return

    # 找到所有.zip文件
    zip_files = [f for f in Path(target_dir).glob('**/*.zip')]

    # 分类并处理每个.zip文件
    for zip_file in zip_files:
        # 从文件名提取类名(忽略数字和文件扩展名)
        category_name = ''.join(filter(str.isalpha, zip_file.stem))

        # 创建类别目录(如果尚不存在)
        category_dir = Path(target_dir) / category_name
        category_dir.mkdir(exist_ok=True)

        # 解压文件到类别目录,只解压图片文件
        with zipfile.ZipFile(zip_file, 'r') as zip_ref:
            for file in zip_ref.namelist():
                if is_image(file) and Path(file).parent != Path('.'):
                    file_path = category_dir / Path(file).name  # 只获取图片文件名,不包括其原始子文件夹路径
                    if not file_path.exists():
                        zip_ref.extract(file, category_dir)
                        # 如果原文件在子文件夹中,移动到类别目录
                        os.rename(category_dir / file, file_path)
                    else:
                        print(f"跳过已存在的文件: {file_path}")

    # 删除所有空的文件夹
    remove_empty_folders(Path(target_dir))

if __name__ == "__main__":
    main()

 

标签:解压,批量,zip,文件夹,dir,file,Path,path,压缩包
From: https://www.cnblogs.com/zly324/p/17928077.html

相关文章

  • 文件批量查找与复制
    文件批量查找与复制文件批量查找复制整理有现成的软件,可以在一堆文件中按文件名中关键字查找你需要的那些文件并全部整理复制到指定文件夹下 ......
  • 电子公章软件,怎么实现批量自动盖章?​
    在商务合作中,企业电子公章软件在提高办公效率、确保文件的法律效力方面发挥着关键作用。微签是国内电子公章软件领域的拓荒者之一,有19年的电子签研发应用经验,专注于审批场景中的安全签章。今天,微签给大家带来了详细的“批量自动签章功能”使用说明。简单来说,只要在“批量自动签章文......
  • html5实现文件批量上传组件
    一、概述在html5中,相对于之前添加了不少新的元素和属性,在javascript中也添加了一些新的API,这些给我们的开发带来了很多便利。但由于各浏览器的发展步骤不一致,也导致了不同浏览器对html5支持的差异性。 二、实现原理1.在该html5实现的文件批量上传组件中,我们主要是利用html5......
  • MyBatis batchInsert 批量插入数据
    mybatis是一个Java的持久层框架,它支持定制化SQL、存储过程以及高级映射。通过MyBatis,开发者可以直接编写原生态SQL,避免了JDBC代码的繁琐。如何在MyBatis中进行批量插入操作。下面是一个简单的例子,说明如何在MyBatis中配置和使用批量插入:Mapper接口:publicinter......
  • Linux下解压命令大全
    .tar解包:tarxvfFileName.tar打包:tarcvfFileName.tarDirName(注:tar是打包,不是压缩!)———————————————.gz解压1:gunzipFileName.gz解压2:gzip-dFileName.gz压缩:gzipFileName.tar.gz和.tgz解压:tarzxvfFileName.tar.gz压缩:tarzcvfFileName.tar.gz......
  • 使用vLLM和ChatGLM3-6b批量推理
    当数据量大的时候,比如百万级别,使用ChatGLM3-6b推理的速度是很慢的。发现使用vLLM和ChatGLM3-6b批量推理极大的提高了推理效率。本文主要通过一个简单的例子进行实践。1.安装vLLM和PyTorch[2]除了Python(本文使用3.11)、CUDA(本文使用11.8)外,还要安装vllm、pytorch、xfo......
  • el-upload批量上传,获取第一个数据返回参数并在后面的上传中进行传递;递归
    fileChange(file,fileList){const{raw}=file;if(file.status!='ready')return;if(file.size/1024/1024>100){this.$message.error('文件大小不能超过100M');returnfalse;} this.upFileList=[]for(letx......
  • ctf.show新手必刷_菜狗杯 杂项签到/损坏的压缩包/谜之栅栏/你会数数吗/你会异或吗
    杂项签到下完压缩包打开获得一张糊糊的图片丢进010editor看一下,既然是签到,会不会直接就藏在里面呢..ctrl+F搜下ctf,找到flag:(小提示:记得把查找的对象从HexBytes换成Text)损坏的压缩包打开压缩包,发现打不开,确实是损坏的压缩包。损坏的话可能是格式不太对,或者格式对了但是内......
  • linux tar打包压缩解压命令学习
    Linux系统中tar是最常用的打包工具,通过打包工具可以压缩/解压比如常见的压缩包格式如下:tar未压缩文件只是做了一个打包而已tar.gz使用gzip算法格式压缩的压缩包tar.bz2bz2格式压缩包tar.xzxz格式压缩参数介绍tar的参数很多列出几个比较......
  • python批量给文本文件txt内容添加特殊符号等内容:-----------------------------------
    python脚本内容如下:#导入需要使用的模块importosimporttkinter.filedialogfn=tkinter.filedialog.askopenfilename(title='选择了一个文件',filetypes=[('文本文件','.txt'),('所有文件','.*')])print("打开了文件:"+fn)line_count=0f=open......