找回密码
 立即注册
搜索
到手67.99元!阿里云轻量2核2G云服务器
查看: 8|回复: 0

Python打包压缩为ZIP文件两种常用方法

[复制链接]

708

主题

0

回帖

11

积分

管理员

积分
11
发表于 昨天 16:16 | 显示全部楼层 |阅读模式
一、标准库 zipfile(内置无需安装,推荐)
1. 压缩单个文件

  1. import zipfile

  2. # 创建zip压缩包,w=写入模式,ZIP_DEFLATED开启压缩
  3. with zipfile.ZipFile("test.zip", "w", compression=zipfile.ZIP_DEFLATED) as zip_obj:
  4.     # 参数:本地文件路径,压缩包内文件名
  5.     zip_obj.write("demo.txt")
复制代码

2. 压缩整个文件夹(包含所有子文件、子目录)

  1. import zipfile
  2. import os

  3. def zip_dir(folder_path, zip_name):
  4.     with zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED) as zip_obj:
  5.         # 遍历目录所有文件
  6.         for root, dirs, files in os.walk(folder_path):
  7.             for file in files:
  8.                 file_full_path = os.path.join(root, file)
  9.                 # 保留目录结构
  10.                 arcname = os.path.relpath(file_full_path, folder_path)
  11.                 zip_obj.write(file_full_path, arcname=arcname)

  12. # 使用:把data文件夹打包成data.zip
  13. zip_dir("data", "data.zip")
复制代码

3. 追加文件到已有 zip

  1. with zipfile.ZipFile("test.zip", "a", zipfile.ZIP_DEFLATED) as zip_obj:
  2.     zip_obj.write("add.txt")
复制代码

4. 解压 zip 文件

  1. with zipfile.ZipFile("test.zip", "r") as zip_obj:
  2.     zip_obj.extractall("./unzip_folder")  # 全部解压到指定文件夹
复制代码


二、shutil.make_archive(极简一行打包文件夹)
封装好的快捷工具,适合快速打包整个目录:

  1. import shutil

  2. # 参数:压缩包前缀、格式、要压缩的文件夹
  3. # 生成:archive.zip
  4. shutil.make_archive("archive", "zip", root_dir="要压缩的文件夹路径")
复制代码

关键参数说明
compression=zipfile.ZIP_DEFLATED:开启压缩(减小体积),去掉则只打包不压缩
ZIP_STORED:仅存储,无压缩
路径尽量使用绝对路径,避免打包路径错乱
常见坑
压缩中文文件名乱码:Python3 默认已修复,无需额外处理
压缩空文件夹:zipfile 默认不会打包空目录

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|skypiea

GMT+8, 2026-7-29 06:43 , Processed in 0.050527 second(s), 20 queries .

Powered by skypiea

快速回复 返回顶部 返回列表