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

2024-09-28 22:08:32 发布

您现在位置:Python中文网/ 问答频道 /正文

我有个备用戒指。它保证了它是zip文件的字节表示。如何在Python中创建zip文件对象,知道这个bytestring?


Tags: 文件对象字节zipbytestring戒指
2条回答

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

使用^{}构造类似文件的对象,然后将该对象传递给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'))

相关问题 更多 >