我有一个字节数组中的二进制数据,我想先使用gzip压缩,然后通过请求发送。我找到了如何压缩文件,但没有找到如何压缩字节数组的方法。那么,我该如何通过Python对字节数组进行gzip压缩呢?
我有一个字节数组中的二进制数据,我想先使用gzip压缩,然后通过请求发送。我找到了如何压缩文件,但没有找到如何压缩字节数组的方法。那么,我该如何通过Python对字节数组进行gzip压缩呢?
看一下Python的zlib
模块。
Python 3: zlib
模块
一个简短的示例:
import zlib
compressed_data = zlib.compress(my_bytearray)
你可以通过以下方法再次解压数据:
decompressed_byte_data = zlib.decompress(compressed_data)
Python 2:zlib
模块
一个简短的示例:
import zlib
compressed_data = zlib.compress(my_string)
您可以通过以下方式再次解压数据:
decompressed_string = zlib.decompress(compressed_data)
正如你所看到的,Python 3 使用字节数组(bytearrays),而 Python 2 使用字符串(strings)。
compressedData = zlib.compress(mystring)
- mgear如果bytearray不太大,可以在内存中存储多次,并且已知为b
,您只需执行以下操作:
b_gz = str(b).encode('zlib')
decode()
方法。str()
,你会得到类似于"bytearray(b'test')"
的东西 - 但他想要压缩bytearray而不是描述bytearray的字符串(我认为这在某些特殊情况下可能会导致数据丢失?)。 - mozzbozz>>> import zlib
>>> a = b'abcdefghijklmn' * 10
>>> ca = zlib.compress(a)
>>> len(a)
140
>>> len(ca)
25
>>> b = zlib.decompress(ca)
>>> b == a
True
>>> b
b'abcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmnabcdefghijklmn'
import zlib
import binascii
def compress_packet(packet):
return zlib.compress(buffer(packet),1)
def decompress_packet(compressed_packet):
return zlib.decompress(compressed_packet)
def demo_zlib() :
packet1 = bytearray()
packet1.append(0x41)
packet1.append(0x42)
packet1.append(0x43)
packet1.append(0x44)
print "before compression: packet:{0}".format(binascii.hexlify(packet1))
cpacket1 = compress_packet(packet1)
print "after compression: packet:{0}".format(binascii.hexlify(cpacket1))
print "before decompression: packet:{0}".format(binascii.hexlify(cpacket1))
dpacket1 = decompress_packet(buffer(cpacket1))
print "after decompression: packet:{0}".format(binascii.hexlify(dpacket1))
def main() :
demo_zlib()
if __name__ == '__main__' :
main()