吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 991|回复: 5
收起左侧

[Python 原创] Python解压包图网压缩包里面指定后缀的文件

[复制链接]
IT大小白 发表于 2023-12-20 23:47
说明:1、主要测试的是中文命名的压缩包,压缩包里面的文件名称是数字或者英明名称
           2、获取压缩包的名称,解压后使用“压缩包的名称 ”重命名需要解压的文件

[Python] 纯文本查看 复制代码
# 在Python中解压压缩包里面指定后缀的文件:

import zipfile
import os
import re

# 解压指定的文件、重命名、删除空文件夹
def extract_files(zip_file_path, file_list, destination, delete_zip):
    for my_dict in file_list:
        
        key =  list(my_dict.keys())        
        list_value =  my_dict[key[0]]  
        
        Z_file_path =f"{zip_file_path}/{key[0]}"
        print(Z_file_path)

        try:
            with zipfile.ZipFile(Z_file_path, 'r') as archive: 
                    for x,file in  enumerate(list_value):
                        # 解压指定的文件
                        archive.extract(file, destination)                        

                        ####-------重命名
                                            
                        # 获取压缩包的名称(不包含扩展名)  
                        filename = os.path.basename(Z_file_path)  
                        zip_name = os.path.splitext(filename)[0]                                           
                        zip_name = re.sub(r"包图网_\d+", "", zip_name)    
                    
                        # 指定旧的文件名路径 
                        old_filename = f"{destination}/{file}"
                    
                        # 获取文件后缀  
                        file_extension = os.path.splitext(old_filename)[1] 
                    
                        # 新的文件名路径 
                        new_filename = f"{destination}/{zip_name}{x}{file_extension}" 

                        # 使用os.rename()函数重命名文件  
                        os.rename(old_filename, new_filename)  
        except:
            print(f"解压失败: {Z_file_path}")

        # 可选:解压后删除原始的压缩包文件
        if delete_zip :            
            os.remove(Z_file_path)

    # 遍历子文件夹
    for root, dirs, files in os.walk(destination):  
        # 检查子文件夹是否为空,如果为空则删除它  
        if not os.listdir(root):  
            os.rmdir(root)
                    

 # 获取压缩包内的文件名称
def get_filenames_from_zip(zip_file_path):

    filenames = []
    with zipfile.ZipFile(zip_file_path, 'r') as zip_ref:
        filenames = zip_ref.namelist()
    
    return filenames

# 主函数
def unzip_files_in_folder(zip_file_path,file_type):
    
    for zip_file_name in os.listdir(zip_file_path):        
        file_path = os.path.join(zip_file_path, zip_file_name)        

        # 判断是否是压缩包
        if zipfile.is_zipfile(file_path):             
            
            # 获取压缩包内含有的文件列表
            file_names = get_filenames_from_zip(file_path)           

            wenjian_liebaio = []
            for path_s in file_names:                  
                # 正则需要解压的文件
                if re.compile(file_type).search(path_s): 
                    wenjian_liebaio.append(path_s)
            file_list.append({zip_file_name:wenjian_liebaio})

if __name__ == "__main__" :

    ##### 手动改参数----------------------------------------

    # 指定压缩包的文件夹路径 # 手动改
    zip_file_path = "./path" 

    # 指定解压到的目标路径 # 手动改
    destination = "./path/jieya"

    # 需要解压的文件类型 # 手动改
    file_type =r"(\.psd$)|(\.ai$)|(\.mp4$)"
    
    # 选择是否删除原始的压缩包文件 # 手动改
    delete_zip = True  # True删除 False不删除

    #####----------------------------------------

    # 指定要压缩包的文件名和需要解压的文件,建立列表字典
    file_list =[]

    # 调用函数进行获取需要解压的文件列表
    unzip_files_in_folder(zip_file_path,file_type)

    print(file_list)

    # 调用函数进行解压指定文件
    extract_files(zip_file_path, file_list, destination,delete_zip)

    print("解压完成")

免费评分

参与人数 2吾爱币 +8 热心值 +2 收起 理由
苏紫方璇 + 7 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
soughing + 1 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Breeze0 发表于 2023-12-21 09:42
好东西,感谢分享
sai609 发表于 2023-12-21 09:45
kings0b 发表于 2023-12-21 10:20
turmasi1234 发表于 2023-12-21 11:18
可以,很好用,感谢分享
soughing 发表于 2023-12-23 11:19
可以,感觉很好用,感谢分享
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-24 17:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表