【问题标题】:Create zip file object from bytestring in Python?从 Python 中的字节串创建 zip 文件对象?
【发布时间】:2015-10-02 14:59:15
【问题描述】:

我有一个字节串。保证它是以字节为单位的 zip 文件的表示形式。如何在 Python 中创建一个 zip 文件对象,知道这个字节串?

【问题讨论】:

  • 什么是“字节串”?你有bytes 或bytearray 吗?还是别的什么?

标签: python zip base64 decode python-3.4


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2021-10-09
      • 2018-03-30
      • 2015-08-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-01-22
      相关资源
      最近更新 更多