You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python:获取LZ4压缩文件对应的未压缩原始文件大小

Python lz4压缩文件快速获取原始未压缩大小方案

实现方法

你在压缩时传入的source_size会直接写入LZ4文件的帧头元数据中,仅需读取文件开头少量字节即可解析,无需读取整个10GB文件,耗时可控制在毫秒级。

单帧LZ4文件(lz4.frame.open默认生成格式)

import lz4.frame

def get_original_size(compressed_file_path: str) -> int:
    # LZ4帧头最长为15字节,读足够解析元数据的长度即可
    with open(compressed_file_path, 'rb') as f:
        frame_header = f.read(15)
    frame_info = lz4.frame.get_frame_info(frame_header)
    # 你压缩时指定的source_size会对应content_size字段
    return frame_info['content_size']

多帧拼接LZ4文件

如果压缩文件由多个LZ4帧拼接而成,可累加每个帧的原始大小,同样无需解码实际内容:

def get_total_original_size(compressed_file_path: str) -> int:
    total_size = 0
    with open(compressed_file_path, 'rb') as f:
        while True:
            header = f.read(15)
            if not header:
                break
            frame_info = lz4.frame.get_frame_info(header)
            total_size += frame_info['content_size']
            # 跳过当前帧剩余内容,直接定位到下一帧起始位置
            f.seek(frame_info['frame_size'] - 15, 1)
    return total_size

原理解释

  • lz4.frame.get_frame_info()不需要传入LZ4FrameFile对象,仅需传入帧头二进制内容即可完成元数据解析
  • 之前使用lz4.frame.open(file).seek(0,2)耗时极长,是因为LZ4FrameFile的seek操作需要解码整个压缩流来计算未压缩数据的偏移量,10GB文件自然需要很长时间
  • 你使用的Python 3.9.7、lz4 3.1.3版本完全兼容上述方法,无需升级依赖

内容的提问来源于stack exchange,提问作者smp55

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 20:18:05