在Python中从bytestring创建zip文件对象?

时间:2015-10-02 14:59:15

标签: python zip base64 decode python-3.4

我有一个字节串。它保证它是以字节为单位的zip文件的表示。我怎么能用Python创建一个zip文件对象,知道这个字节串?

2 个答案:

答案 0 :(得分:12)

使用io.BytesIO构建类似文件的对象,然后将该对象传递给ZipFile constructor

z = bytes([
0x50, 0x4B, 0x03, 0x04, 0x0A, 0x00, 0x00, 0x00,
0x00, 0x00, 0x7A, 0x52, 0x42, 0x47, 0x20, 0x30,
0x3A, 0x36, 0x06, 0x00, 0x00, 0x00, 0x06, 0x00,
0x00, 0x00, 0x09, 0x00, 0x1C, 0x00, 0x68, 0x65,
0x6C, 0x6C, 0x6F, 0x2E, 0x74, 0x78, 0x74, 0x55,
0x54, 0x09, 0x00, 0x03, 0x97, 0xA0, 0x0E, 0x56,
0x97, 0xA0, 0x0E, 0x56, 0x75, 0x78, 0x0B, 0x00,
0x01, 0x04, 0x31, 0x04, 0x00, 0x00, 0x04, 0x31,
0x04, 0x00, 0x00, 0x68, 0x65, 0x6C, 0x6C, 0x6F,
0x0A, 0x50, 0x4B, 0x01, 0x02, 0x1E, 0x03, 0x0A,
0x00, 0x00, 0x00, 0x00, 0x00, 0x7A, 0x52, 0x42,
0x47, 0x20, 0x30, 0x3A, 0x36, 0x06, 0x00, 0x00,
0x00, 0x06, 0x00, 0x00, 0x00, 0x09, 0x00, 0x18,
0x00, 0x00, 0x00, 0x00, 0x00, 0x01, 0x00, 0x00,
0x00, 0xB4, 0x81, 0x00, 0x00, 0x00, 0x00, 0x68,
0x65, 0x6C, 0x6C, 0x6F, 0x2E, 0x74, 0x78, 0x74,
0x55, 0x54, 0x05, 0x00, 0x03, 0x97, 0xA0, 0x0E,
0x56, 0x75, 0x78, 0x0B, 0x00, 0x01, 0x04, 0x31,
0x04, 0x00, 0x00, 0x04, 0x31, 0x04, 0x00, 0x00,
0x50, 0x4B, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00,
0x01, 0x00, 0x01, 0x00, 0x4F, 0x00, 0x00, 0x00,
0x49, 0x00, 0x00, 0x00, 0x00, 0x00,])

# Given "z", a bytes object containing a ZIP file,
# extract the data therein
import zipfile
import io

zf = zipfile.ZipFile(io.BytesIO(z), "r")
for fileinfo in zf.infolist():
    print(zf.read(fileinfo).decode('ascii'))

答案 1 :(得分:0)

您可以将字节字符串转换为字节数组,将该字节数组写入文件并将其视为zip文件。看到这个帖子: Python write string of bytes to file