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

Python 如何将ZipFile对象转换为支持缓冲区API的对象?,python,object,binary,zipfile,Python,Object,Binary,Zipfile,我有一个ZipFile对象,我需要将其转换为一个可以与BufferAPI一起使用的对象。上下文是,我试图使用一个API,该API表示它接受一个类型为string($binary)的文件。我该怎么做?我知道这是完全错误的,但以下是我的代码: def create_extension_zip_file(self, path_to_extension_directory, directory_name): zipObj = ZipFile("static_extension.

我有一个ZipFile对象,我需要将其转换为一个可以与BufferAPI一起使用的对象。上下文是,我试图使用一个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

或者,如果API需要类似文件的对象,则可以在创建zipfile时传递实例并将其传递给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需要一个字节实例,您可以在写入zip文件后以二进制模式打开它,并传递字节

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

它看起来不像'zipObj.write(bytes\u content,basename(filePath))`那样有效。它说:没有这样的文件或目录-b'{…}。有什么建议吗?事实上,我用zipObj.writestr而不是write:)解决了这个问题。问题是,我得到了相同的错误,说它需要缓冲区apiNevermind支持,我只需要执行buf.read()。谢谢