如何在Python中从字节串创建zip文件对象?

10

我有一个字节串,保证它是一个Zip文件的字节表示。如何在Python中使用这个字节串创建Zip文件对象?


什么是“bytestring”?你有一个bytes或者bytearray吗?还是其他什么东西? - Robᵩ
2个回答

43

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

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'))

-3

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接