我有一個字節陣列裏面的二進制數據,我想先壓縮然後通過請求發佈。我發現如何gzip一個文件,但無法找到一個字節陣列。那麼,我該如何通過Python對一個bytearray進行gzip?如何在Python中gzip一個bytearray?
回答
萬一字節組不是太大存儲在內存中多次並稱爲b
,你可以:
b_gz = str(b).encode('zlib')
如果你需要做的第一deocding,看看在decode()
bytearray的方法。
我不知道這是否正確?如果你在一個字節數組中調用'str()',你會得到像''bytearray(b'test')''這樣的東西 - 但是他想要壓縮字節數組而不是一些描述字節數組的字符串(我認爲這也可能導致在某些特殊情況下丟失數據?)。 – mozzbozz 2014-11-05 09:29:42
我只看到代碼只能在Python 2中工作。在Python 3中,該領域已經發生了一些變化。 – 2014-11-05 09:43:55
好的,這就是我想的(我主要使用Python 3)。你可以在你的帖子中留言,以便沒有閱讀「第一次嘗試」的評論。 – mozzbozz 2014-11-05 12:34:06
看一看Python的模塊zlib
。
的Python 3:zlib
-module
簡單例子:
decompressed_byte_data = zlib.decompress(compressed_data)
的Python 2:
import zlib
compressed_data = zlib.compress(my_bytearray)
可以再次通過解壓縮數據zlib
-module
簡單例子:
import zlib
compressed_data = zlib.compress(my_string)
您可以通過重新解壓縮數據:
decompressed_string = zlib.decompress(compressed_data)
正如你所看到的,Python 3中使用的ByteArray而Python 2使用的字符串。
Python標準庫的zlib的模塊應該滿足您的要求:
>>> 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'
這是Python3.4下的輸出,但它的Python 2.7下工作一樣 -
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()
這應該做。 zlib需要訪問bytearray內容,爲此使用buffer()。
- 1. 在HttpResponse中返回一個python bytearray
- 2. AS-3 - 如何將一個ByteArray在另一個的ByteArray
- 3. 如何從HttpResponse中讀取一個bytearray?
- 4. 在Python中使用bytearray
- 5. python bytearray
- 6. 連接long和bytearray到另一個bytearray
- 7. 我將如何bytewap一個ByteArray?
- 8. Bytearray sum in python
- 9. 如何流化Python中構建的gzip?
- 10. Lua:如何在內存中gzip一個字符串(gzip,而不是zlib)?
- 11. 如何將python str轉換爲bytearray
- 12. 如何GZIP一個XSLT網頁
- 13. 如何Gzip一個JavaScript文件?
- 14. 如何使用Fiddler做一個gzip POST?
- 15. 在jQuery中,如何獲取一個gzip文件?
- 16. 如何在JNI中讀取bytearray?
- 17. Java從一個Bytearray創建一個BufferedImage
- 18. 應用GZIP壓縮在Python大熊貓一個CSV
- 19. 保存與pydoop一個gzip文件在python
- 20. 什麼是as3 bitmapdata bytearray格式/如何在python
- 21. Python:高效的bytearray增量
- 22. Python輸出奇怪的bytearray
- 23. Python bytearray verses字節列表
- 24. 來自bytearray的Python IEEE754
- 25. 在python中打開gzip文件Apache Beam
- 26. 在Python中使用gzip文件
- 27. 在Python中對gzip文件使用csvreader
- 28. 在Python中使用GZIP模塊
- 29. 反序列化Python中的Protobuf 3 bytearray
- 30. 轉換ByteArray的短整型在Python
醜陋的方式:將其保存在文件中:P。但也許這將有助於:http://stackoverflow.com/questions/8506897/how-do-i-gzip-compress-a-string-in-python – 2014-11-05 09:14:09