如何在python中从网络套接字解压缩LZW数据包?

时间:2019-04-15 06:55:57

标签: python networking compression

如何为LZW数据包充气?有图书馆吗?

我一直在尝试用python充实和解码National Weather Service EMWIN流。

它要求将数据包从PKUNZIP格式解压缩,这样说。

我研究发现PKZIP接近或为LZW。但是我找不到任何库可以使用它。

ZLIB是gzip,是LZ77和霍夫曼编码 LZW库没有我可以找到的文档 我发现这个片段要求数据是某种列表

到目前为止,这是我一直在努力的工作。介意修补

    import socket


sck = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
sck.connect(("1.pool.iemwin.net", 2211))
sck.send("")

data = sck.recv(1116)
sck.close()



def decompress(compressed):
    """Decompress a list of output ks to a string."""
    from cStringIO import StringIO

    # Build the dictionary.
    dict_size = 256
    dictionary = dict((i, chr(i)) for i in xrange(dict_size))
    # in Python 3: dictionary = {i: chr(i) for i in range(dict_size)}

    # use StringIO, otherwise this becomes O(N^2)
    # due to string concatenation in a loop
    result = StringIO()
    w = chr(compressed.pop(0))
    result.write(w)
    for k in compressed:
        if k in dictionary:
            entry = dictionary[k]
        elif k == dict_size:
            entry = w + w[0]
        else:
            raise ValueError('Bad compressed k: %s' % k)
        result.write(entry)

        # Add w+entry[0] to the dictionary.
        dictionary[dict_size] = w + entry[0]
        dict_size += 1

        w = entry
    return result.getvalue()


new = decompress(data)
print new

整个协议的文档是https://www.nws.noaa.gov/emwin/winpro.htm

^^^那几乎就是我能找到的

2 个答案:

答案 0 :(得分:0)

zipfile模块处理PKZIP数据(https://docs.python.org/3/library/zipfile.html

答案 1 :(得分:0)

所以我的问题不在于它是否已被压缩,实际上是经过编码的。

经过异或运算,然后压缩了某些数据包,而不是全部压缩。 xor的密钥是0xFF,然后您可以使用zlib解压缩文件

故事的道德: 如果由于某种原因有人遇到压缩数据包而无法对其进行解压缩,请尝试查看是否对它们进行了编码。

感谢Jose Nieves