如何为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
^^^那几乎就是我能找到的
答案 0 :(得分:0)
zipfile模块处理PKZIP数据(https://docs.python.org/3/library/zipfile.html)
答案 1 :(得分:0)
所以我的问题不在于它是否已被压缩,实际上是经过编码的。
经过异或运算,然后压缩了某些数据包,而不是全部压缩。 xor的密钥是0xFF,然后您可以使用zlib解压缩文件
故事的道德: 如果由于某种原因有人遇到压缩数据包而无法对其进行解压缩,请尝试查看是否对它们进行了编码。
感谢Jose Nieves