You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多
文档控制台
免费开始使用

基于文件类型的LZMA压缩估算魔数技术求助

估算.tar.xz压缩后大小的实用压缩比例参考

以下是基于xz默认压缩级别(级别6)的经验压缩比例,可直接替换你代码中的“魔数”,满足存储空间预校验的需求:

  • 已压缩/多媒体文件:压缩比设为1.0,这类文件本身已经经过压缩(如.zip、.jpg、.mp4、.docx),xz几乎无法再压缩,甚至可能因tar元数据略微增大。
  • 纯文本/代码文件:压缩比设为0.2,纯文本冗余度极高,xz的LZMA2算法压缩效果显著,普通代码或文档类文本的实际压缩比通常在0.1~0.3区间。
  • 二进制可执行文件:压缩比设为0.4,这类文件有一定冗余但低于文本,比如Windows的.exe或Linux的.so文件,实际压缩比在0.3~0.5之间。
  • 原始数据/未压缩位图:压缩比设为0.1,比如.raw传感器数据、.bmp位图,这类文件几乎无压缩,xz能大幅压缩,实际比例在0.05~0.2区间。
  • 未知类型文件:保留你的默认值0.65,覆盖所有未匹配到的文件类型,作为中间估算值。

优化后的代码示例:

from pathlib import Path

def estimateCompressionSize(filePath: Path) -> int:
    if filePath.is_dir():
        total_size = 0
        for item in filePath.rglob("*"):
            total_size += estimateCompressionSize(item)
        return total_size
    
    ext = filePath.suffix.lower()
    
    # 已压缩/多媒体文件:几乎无法再压缩
    if ext in (".zip", ".7z", ".rar", ".jpg", ".jpeg", ".png", ".gif", ".mp4", ".mp3", ".flac", ".docx", ".xlsx"):
        comp_ratio = 1.0
    # 纯文本/代码文件:高压缩比
    elif ext in (".txt", ".py", ".js", ".html", ".css", ".md", ".csv", ".json", ".xml"):
        comp_ratio = 0.2
    # 二进制可执行文件/编译产物
    elif ext in (".exe", ".dll", ".so", ".bin", ".elf"):
        comp_ratio = 0.4
    # 原始数据/未压缩位图
    elif ext in (".raw", ".dat", ".bmp"):
        comp_ratio = 0.1
    # 其他未知类型:中间估算值
    else:
        comp_ratio = 0.65
    
    return int(filePath.stat().st_size * comp_ratio)

补充说明:如果使用xz的更高压缩级别(如级别9),可适当下调对应比例(比如文本类调到0.15);若用更低级别则上调。这些比例是经验值,虽然无法做到100%精确,但用于预校验存储空间完全足够——毕竟你只需要判断是否有足够空间,不需要精确到字节。

内容的提问来源于stack exchange,提问作者Anna-Rose

火山引擎 最新活动