我在一个字节数组中有二进制数据,我想先gzip,然后通过请求发布。我发现了如何gzip文件,但找不到字节数组。因此,如何通过Python gzip一个字节数组?
看看Python的zlib
-模块。
Python 3: zlib
-module
一个简短的例子:
zlib
您可以通过以下方式再次解压缩数据:
import zlib
compressed_data = zlib.compress(my_bytearray)
Python 2: decompressed_byte_data = zlib.decompress(compressed_data)
一个简短的例子:
zlib
-module
您可以通过以下方式再次解压缩数据:
zlib
您可以看到,Python 3使用字节数组,而Python 2使用字符串。
import zlib
compressed_data = zlib.compress(my_string)
这应该做。 zlib需要访问字节数组内容,为此使用buffer()。
如果字节数组不是太大而不能多次存储在内存中并且被称为decompressed_string = zlib.decompress(compressed_data)
,则可以:
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()
如果您需要先进行deoc,请查看字节数组的b
方法。
Python标准库的zlib模块应满足您的要求:
b_gz = str(b).encode('zlib')
这是Python3.4的输出,但在Python 2.7下的工作原理相同-