说明: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("解压完成") |