Python 如何将ZipFile对象转换为支持缓冲区API的对象?
我有一个ZipFile对象,我需要将其转换为一个可以与BufferAPI一起使用的对象。上下文是,我试图使用一个API,该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.
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()。谢谢