Python Zstd压缩解压

python 复制代码
import tarfile
from pathlib import Path
from compression.zstd import ZstdFile, CompressionParameter


def compress_folder(src_folder: str, output_file: str, level: int = 9):
    """
    将 src_folder 文件夹压缩为一个 .tar.zst 文件
    :param src_folder: 待压缩的文件夹路径
    :param output_file: 输出的压缩文件路径,例如 'archive.tar.zst'
    :param level: 压缩级别 (1-22,默认22为最高,速度越慢)
    """
    src_path = Path(src_folder)
    if not src_path.is_dir():
        raise NotADirectoryError(f"{src_folder} 不是一个有效的文件夹")

    # 打开 zstd 压缩文件(以二进制写模式),并指定压缩级别
    with ZstdFile(output_file, mode="wb",
                  options={CompressionParameter.compression_level: level}) as zf:
        # 在 zstd 压缩流之上再包一层 tar 归档,实现"打包+压缩"
        with tarfile.open(fileobj=zf, mode="w|") as tar:
            tar.add(src_path, arcname=src_path.name)

    print(f"压缩完成: {output_file}")


def decompress_folder(archive_file: str, dest_folder: str = "."):
    """
    解压 .tar.zst 文件到指定目录
    :param archive_file: 压缩文件路径,例如 'archive.tar.zst'
    :param dest_folder: 解压目标目录,默认当前目录
    """
    Path(dest_folder).mkdir(parents=True, exist_ok=True)

    with ZstdFile(archive_file, mode="rb") as zf:
        with tarfile.open(fileobj=zf, mode="r|") as tar:
            tar.extractall(path=dest_folder)  # Python 3.14 默认使用安全过滤器 filter="data"

    print(f"解压完成,文件已还原到: {dest_folder}")


if __name__ == "__main__":
    # compress_folder("C:/Users/zhoull/Downloads/ebook", "C:/Users/zhoull/Downloads/ebook.tar.zst", level=9)
    decompress_folder("C:/Users/zhoull/Downloads/ebook.tar.zst", "D:/output_folder")
相关推荐
梯度下降者34 分钟前
我校学子斩获 2025 全国高新技术竞赛 Python 赛道全国一等奖
python·教育·竞赛·信息技术·人才培养
小小张说故事43 分钟前
Python 的 memoryview 为什么能零拷贝:拆开 buffer protocol、cast 和那道 BufferError
python
Hvitur1 小时前
Java - Lambda
java·开发语言·python
2601_967980112 小时前
win10如何把python加入环境变量
python·win10·安装教程·命令行·环境变量
锋行天下9 小时前
langgraph 后端发自定义数据,前端接收方法概括
人工智能·python
benchmark_cc11 小时前
用 QuantDash 读取单只股票五档盘口:抽样、缺失值检查与复现记录
python·数据分析·pandas·量化交易·股票数据·quantdash
曲径海盗12 小时前
【Python 学习第 55 天】列表基础
python·学习笔记·编程入门
专注仿真12 小时前
知识问答模型用到的算法集详解及代码实例
python·算法·代码·大模型训练·控制算法
jyOverQ12 小时前
我写了一个 CSDN Markdown 图片助手:告别本地图片逐张上传
python·工具·csdn
刘马想放假15 小时前
CANviz 使用指南|Linux 安装、DBC 解码、实时曲线与 J1939 实战
linux·python·websocket