Python 3:从字符串压缩多个文件

问题描述

我需要从字符串生成的多个txt文件中创建一个zip文件

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流。