IT大小白 发表于 2023-12-20 23:47

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]
      
      Z_file_path =f"{zip_file_path}/{key}"
      print(Z_file_path)

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

                        ####-------重命名
                                          
                        # 获取压缩包的名称(不包含扩展名)
                        filename = os.path.basename(Z_file_path)
                        zip_name = os.path.splitext(filename)                                          
                        zip_name = re.sub(r"包图网_\d+", "", zip_name)   
                  
                        # 指定旧的文件名路径
                        old_filename = f"{destination}/{file}"
                  
                        # 获取文件后缀
                        file_extension = os.path.splitext(old_filename)
                  
                        # 新的文件名路径
                        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("解压完成")

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

可以,感觉很好用,感谢分享
页: [1]
查看完整版本: Python解压包图网压缩包里面指定后缀的文件