提取zip、查找.mod文件重命名文件夹并重打包的Python算法代码问询
Python实现ZIP包解压、重命名、重新打包方案
前置说明
- 所有用到的库均为Python标准库,无需额外安装第三方依赖
- 代码默认逻辑:如果压缩包内存在多个.mod文件,取排序后的第一个;如果没有.mod文件会抛出异常终止流程,可根据需要调整异常分支逻辑
- 重命名逻辑默认取.mod文件的不带后缀的文件名作为新文件夹名,如果需要保留.mod后缀可以自行修改对应代码行
完整实现代码
import os import zipfile import shutil # -------------------------- 配置参数,运行前修改 -------------------------- source_zip_path = "./your_downloaded_file.zip" # 替换为你下载的zip压缩包实际路径 temp_extract_dir = "./some_name" # 临时解压目录名,无需修改 # ------------------------------------------------------------------------ # 1. 解压zip包到指定临时文件夹 os.makedirs(temp_extract_dir, exist_ok=True) with zipfile.ZipFile(source_zip_path, 'r') as zip_ref: zip_ref.extractall(temp_extract_dir) # 2. 查找解压目录下的.mod文件 mod_files = [f for f in os.listdir(temp_extract_dir) if f.lower().endswith('.mod')] if not mod_files: raise FileNotFoundError("解压目录下未找到扩展名为.mod的文件") mod_filename = mod_files[0] # 去掉.mod后缀作为新文件夹名,需要保留后缀的话直接改为 new_dir_name = mod_filename new_dir_name = os.path.splitext(mod_filename)[0] new_dir_path = os.path.join(os.path.dirname(temp_extract_dir), new_dir_name) # 3. 重命名临时文件夹 if os.path.exists(new_dir_path): # 目标文件夹已存在时默认删除,不需要删除可以改为抛出异常终止流程 shutil.rmtree(new_dir_path) os.rename(temp_extract_dir, new_dir_path) # 4. 将重命名后的文件夹重新打包为zip output_zip_path = f"{new_dir_name}.zip" with zipfile.ZipFile(output_zip_path, 'w', zipfile.ZIP_DEFLATED) as zip_ref: # 遍历文件夹保持目录结构,避免打包时带上外层绝对路径 for root, dirs, files in os.walk(new_dir_path): for file in files: file_path = os.path.join(root, file) arcname = os.path.relpath(file_path, os.path.dirname(new_dir_path)) zip_ref.write(file_path, arcname=arcname) print(f"处理完成,最终压缩包已保存至:{output_zip_path}")
可选调整说明
- 如果需要匹配子目录内的.mod文件,将第二步查找.mod文件的逻辑替换为递归遍历即可
- 如果需要保留原始压缩包的压缩参数,可以调整
ZIP_DEFLATED为对应压缩格式 - 如果不需要保留处理后的中间文件夹,可以在打包完成后添加
shutil.rmtree(new_dir_path)删除临时目录
内容的提问来源于stack exchange,提问作者Razilator
相关产品推荐
相关产品推荐

