为了账号安全,请及时绑定邮箱和手机立即绑定

如何将 ZipFile 对象转换为支持缓冲区 API 的对象?

如何将 ZipFile 对象转换为支持缓冲区 API 的对象?

达令说 2023-10-31 14:15:35
我有一个 ZipFile 对象,需要将其转换为可与缓冲区 api 配合使用的对象。上下文是我正在尝试使用一个 API,该 API 表示它需要一个类型为string($binary). 我该怎么做呢?我知道这是完全错误的,但这是我的代码:    def create_extension_zip_file(self, path_to_extension_directory, directory_name):    zipObj = ZipFile("static_extension.zip", "w")    with zipObj:        # Iterate over all the files in directory        for folderName, subfolders, filenames in os.walk(path_to_extension_directory):            for filename in filenames:                # create complete filepath of file in directory                filePath = os.path.join(folderName, filename)                with open(filename, 'rb') as file_data:                    bytes_content = file_data.read()                # Add file to zip                zipObj.write(bytes_content, basename(filePath))    return zipObj
查看完整描述

1 回答

?
慕容森

TA贡献1853条经验 获得超18个赞

或者,如果 API 需要类似文件的对象,您可以在创建 zip 文件时传递BytesIO实例并将其传递给 API

import io


def create_extension_zip_file(self, path_to_extension_directory, directory_name):

    buf = io.BytesIO()

    zipObj = ZipFile(buf, "w")

    with zipObj:

        # Iterate over all the files in directory

        for folderName, subfolders, filenames in os.walk(path_to_extension_directory):

            for filename in filenames:

                # create complete filepath of file in directory

                filePath = os.path.join(folderName, filename)

                with open(filename, 'rb') as file_data:

                    bytes_content = file_data.read()

                # Add file to zip

                zipObj.write(bytes_content, basename(filePath))

    # Rewind the buffer's file pointer (may not be necessary)

    buf.seek(0)

    return buf

如果 API 需要 bytes 实例,您可以在写入后以二进制模式打开 zip 文件,然后传递 bytes 。


with open('static_extension.zip', 'rb') as f:

    bytes_ = f.read()


查看完整回答
反对 回复 2023-10-31
  • 1 回答
  • 0 关注
  • 96 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信