|
|
一、标准库 zipfile(内置无需安装,推荐)
1. 压缩单个文件
- import zipfile
- # 创建zip压缩包,w=写入模式,ZIP_DEFLATED开启压缩
- with zipfile.ZipFile("test.zip", "w", compression=zipfile.ZIP_DEFLATED) as zip_obj:
- # 参数:本地文件路径,压缩包内文件名
- zip_obj.write("demo.txt")
复制代码
2. 压缩整个文件夹(包含所有子文件、子目录)
- import zipfile
- import os
- def zip_dir(folder_path, zip_name):
- with zipfile.ZipFile(zip_name, "w", zipfile.ZIP_DEFLATED) as zip_obj:
- # 遍历目录所有文件
- for root, dirs, files in os.walk(folder_path):
- for file in files:
- file_full_path = os.path.join(root, file)
- # 保留目录结构
- arcname = os.path.relpath(file_full_path, folder_path)
- zip_obj.write(file_full_path, arcname=arcname)
- # 使用:把data文件夹打包成data.zip
- zip_dir("data", "data.zip")
复制代码
3. 追加文件到已有 zip
- with zipfile.ZipFile("test.zip", "a", zipfile.ZIP_DEFLATED) as zip_obj:
- zip_obj.write("add.txt")
复制代码
4. 解压 zip 文件
- with zipfile.ZipFile("test.zip", "r") as zip_obj:
- zip_obj.extractall("./unzip_folder") # 全部解压到指定文件夹
复制代码
二、shutil.make_archive(极简一行打包文件夹)
封装好的快捷工具,适合快速打包整个目录:
- import shutil
- # 参数:压缩包前缀、格式、要压缩的文件夹
- # 生成:archive.zip
- shutil.make_archive("archive", "zip", root_dir="要压缩的文件夹路径")
复制代码
关键参数说明
compression=zipfile.ZIP_DEFLATED:开启压缩(减小体积),去掉则只打包不压缩
ZIP_STORED:仅存储,无压缩
路径尽量使用绝对路径,避免打包路径错乱
常见坑
压缩中文文件名乱码:Python3 默认已修复,无需额外处理
压缩空文件夹:zipfile 默认不会打包空目录
|
|