如何在python中从网络套接字解压LZW数据包?
如何给LZW包充气?有图书馆吗 我一直在尝试用python对国家气象局的EMWIN流进行膨胀和解码 它要求从PKUNZIP格式解压数据包 我研究发现PKZIP很接近或是LZW。但是我找不到任何图书馆可以用这个 ZLIB是gzip,它是LZ77和哈夫曼编码 LZW图书馆没有我能找到的文档 我发现的这个片段要求数据是某种类型的列表 这就是我到目前为止一直在做的事情。小心修补如何在python中从网络套接字解压LZW数据包?,python,networking,compression,Python,Networking,Compression,如何给LZW包充气?有图书馆吗 我一直在尝试用python对国家气象局的EMWIN流进行膨胀和解码 它要求从PKUNZIP格式解压数据包 我研究发现PKZIP很接近或是LZW。但是我找不到任何图书馆可以用这个 ZLIB是gzip,它是LZ77和哈夫曼编码 LZW图书馆没有我能找到的文档 我发现的这个片段要求数据是某种类型的列表 这就是我到目前为止一直在做的事情。小心修补 import socket sck = socket.socket(socket.AF_INET, socket.
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
整个协议的文档如下所示
^^^这几乎是我能找到的所有内容,zipfile模块处理PKZIP数据(),所以我的问题不是它被压缩了,而是它被编码了 它是异或的,然后一些数据包被压缩,而不是所有的数据包。 xor的键是0xFF,然后可以使用zlib解压缩文件 故事的寓意: 如果由于某种原因,有人遇到压缩数据包而无法解压缩,请尝试查看它们是否已编码
谢谢Jose Nieves我相信你也知道我不知道在哪里可以处理套接字数据,我假设它是一个字符串。只是文件是的,但我更感兴趣的是处理EMWIN以获得诸如hwo和天气警报之类的文本产品“其他国家数据产品,如给定小时内的所有地面观测(MetaR),首先打包到一个“文件”中,然后进行压缩和传输。”,您应该能够修剪零字节,然后将1024字节块作为文件处理。