卓越飞翔博客卓越飞翔博客

卓越飞翔 - 您值得收藏的技术分享站
技术文章30607本站已运行3720

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

说明:
1、主要测试的是中文命名的压缩包,压缩包里面的文件名称是数字或者英明名称
2、获取压缩包的名称,解压后使用“压缩包的名称 ”重命名需要解压的文件
# 在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("解压完成")
 
卓越飞翔博客
上一篇: Python 某道翻译源码 仅供学习 勿作他用
下一篇: 返回列表
留言与评论(共有 0 条评论)
   
验证码:
隐藏边栏