解压重复压缩的脚本 .zip等等压缩包 作者: ynnddddd 时间: 2024-10-22 分类: MISC 超级好用的,解决ctf misc题常见的多重压缩后的压缩包解压缩的问题,python脚本, 注意:碰到解压不了的压缩包会导致程序一直进行,请确保文件为全可解压的压缩包,否则需要及时手动关闭程序,但已经解压好的文件不会出现问题 import os import tarfile import patoolib import zipfile import py7zr def extract_archive(archive_path, extract_path): """ 解压缩指定路径的压缩包到指定目录,并在解压后删除原压缩包。 """ try: if archive_path.endswith(".zip"): with zipfile.ZipFile(archive_path, 'r') as zip_ref: zip_ref.extractall(extract_path) elif archive_path.endswith(".tar"): with tarfile.open(archive_path, 'r') as tar_ref: tar_ref.extractall(extract_path) elif archive_path.endswith(".7z"): with py7zr.SevenZipFile(archive_path, mode='r') as sz_ref: sz_ref.extractall(extract_path) elif archive_path.endswith(".rar"): patoolib.extract_archive(archive_path, outdir=extract_path) # 解压完成后删除压缩包 print(f"【删除压缩包】{archive_path}") os.remove(archive_path) except Exception as e: print(f"解压失败: {archive_path}, 错误信息: {str(e)}") def extract_all_archives(folder_path): """ 解压文件夹中的所有压缩包,直接将内容放到原来的文件夹,不创建额外文件夹,且解压后删除压缩包。 """ flag = False for root, dirs, files in os.walk(folder_path): for file in files: file_path = os.path.join(root, file) if file_path.endswith((".zip", ".tar", ".7z", ".rar")): print(f"【发现压缩包】{file_path}") flag = True # 直接解压到压缩包所在的目录 extract_archive(file_path, root) return flag if __name__ == "__main__": """ 直接处理文件夹,多次执行主函数,直至没有压缩包为止 """ folder_a_path = r'D:\xxxx' contains_unzip_file = True while contains_unzip_file: contains_unzip_file = extract_all_archives(folder_a_path) 说明:修改"D:\xxxx"为压缩包存放的路径,脚本执行后会自动删除原始压缩包,留下解压好的压缩包和文件 标签: zip