有没有可以将目录添加到现有zip压缩包的函数或相关库?
不同编程语言下支持向已有zip包追加目录的第三方库推荐
Python
- 标准库
zipfile原生支持该功能,无需额外安装第三方依赖。以mode='a'追加模式打开zip包后,递归遍历目标目录并写入文件即可,可自定义保留目录的相对路径结构。
参考代码示例:
import zipfile import os def add_dir_to_existing_zip(zip_path, target_dir_path): with zipfile.ZipFile(zip_path, 'a', zipfile.ZIP_DEFLATED) as zipf: for root, _, files in os.walk(target_dir_path): for file in files: file_abs_path = os.path.join(root, file) # 自定义文件在zip包内的存储路径 arc_path = os.path.relpath(file_abs_path, os.path.dirname(target_dir_path)) zipf.write(file_abs_path, arcname=arc_path)
- 有高性能需求可选择第三方库
pylibzip,是libzip的Python绑定,支持增量更新、大文件优化等扩展特性。
Java
- 推荐
Apache Commons Compress库,功能完善,无需解压原有zip内容即可完成目录追加,完整保留目录层级结构。 - JDK 7+ 内置的
FileSystemAPI也支持zip操作,将zip包作为虚拟文件系统挂载后,直接复制目录到虚拟路径即可完成追加,无需引入第三方依赖。
Node.js
- 轻量场景优先选
adm-zip,无原生依赖,加载已有zip包后调用addLocalFolder方法即可一键添加本地目录,最后写入保存即可。
参考代码示例:
const AdmZip = require('adm-zip'); const zip = new AdmZip('./existing.zip'); // 第二个参数为目录在zip包内的存储路径 zip.addLocalFolder('./local_target_dir', 'inner_dir_path'); zip.writeZip('./existing.zip');
- 大文件处理场景可使用
yauzl+yazl的流式处理组合,内存占用更低,性能更好。
Go
- 标准库
archive/zip原生支持追加操作,读取原有zip条目后追加新目录对应的文件条目,回写文件即可,无需第三方依赖。 - 性能优化可选第三方库
klauspost/compress/zip,是标准库的优化分支,压缩速度提升明显,支持更多扩展特性。
内容的提问来源于stack exchange,提问作者JL710
相关产品推荐
相关产品推荐

