问题描述
import zipfile
from io import StringIO
def zip_files(file_arr):
# file_arr is an array of [(fname,fbuffer),...]
f = StringIO()
z = zipfile.ZipFile(f,'w',zipfile.ZIP_DEFLATED)
for f in file_arr:
z.writestr(f[0],f[1])
z.close()
return f.getvalue()
file1 = ('f1.txt','Question1\nQuestion2\n\nQuestion3')
file2 = ('f2.txt','Question4\nQuestion5\n\nQuestion6')
f_arr = [file1,file2]
return zip_files(f_arr)
这会在TypeError: string argument expected,got 'bytes'
上引发错误writestr()
。我尝试使用BytesIO而不是字符串IO,但得到相同的错误。这基于this answer,它能够针对python 2做到这一点。
关于使用zipfile存储多个文件,我似乎找不到任何在线内容
解决方法
Zip文件是二进制文件,因此应使用io.BytesIO
流而不是io.StringIO
流。