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

Python中无法解压LZ4字节数据求助(附Redis操作代码示例)

解决LZ4解压失败的问题

嘿,我仔细看了你的代码和Redis返回的result输出,发现问题根本不是LZ4解压的问题——你拿到的数据压根不是LZ4压缩后的格式!

先搞清楚数据到底是什么

你看result里的b'\xa4date\xa6180320',这里的\xa4是BSON的字符串类型标记(表示后面跟着长度为4的字符串"date"),\xa6对应长度6的"180320",整个数据就是标准的BSON格式(MongoDB常用的二进制序列化格式),完全没有被LZ4压缩过。

修正代码:直接解析BSON就行

你不需要用lz4framed,换用bson库解析就好。先装依赖:

pip install pymongo  # pymongo自带bson模块

然后修改你的测试代码:

import redis
import bson
import unittest

class TestWXRedis(unittest.TestCase):
    def test_t(self):
        r = redis.StrictRedis(host=xxx, port=xxxx)
        result = r.hget("xxxxx","xxxx")
        print(result)
        # 把BSON二进制转成Python字典
        parsed_data = bson.loads(result)
        print(parsed_data)

万一真的是LZ4压缩的BSON?

如果你的业务逻辑里确实应该是LZ4压缩后的BSON,那可能是用了原始LZ4块压缩(不是lz4framed的帧格式),可以试试用lz4.block模块解压:

import redis
import bson
import lz4.block
import unittest

class TestWXRedis(unittest.TestCase):
    def test_t(self):
        r = redis.StrictRedis(host=xxx, port=xxxx)
        result = r.hget("xxxxx","xxxx")
        print(result)
        # 先解压再解析BSON
        decompressed = lz4.block.decompress(result)
        parsed_data = bson.loads(decompressed)
        print(parsed_data)

为啥lz4framed会失败?

因为lz4framed只认标准的LZ4帧格式(开头有特定的0x04224D18标识),你的数据开头是b'\xba\x00\x00\x00',完全不符合帧格式要求,自然会报错。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 11:39:56