zipfile是一个标准库模块,可以完全满足您的需求。在您的用例中,肉类和土豆是一种称为“ writestr”的方法,该方法采用文件名以及其中要压缩的文件名。
在下面的代码中,我对文件解压缩时使用了顺序命名方案,但是可以将其切换为所需的文件名。
import zipfile
import StringIO
zipped_file = StringIO.StringIO()
with zipfile.ZipFile(zipped_file, 'w') as zip:
for i, file in enumerate(files):
file.seek(0)
zip.writestr("{}.csv".format(i), file.read())
zipped_file.seek(0)
如果要对代码进行过时的验证(提示Python 3提示提示),则可能要切换到使用io.BytesIO而不是StringIO,因为Python 3都是关于字节的。另一个好处是,在读取之前,io.BytesIO不需要显式查找(我还没有使用Django的HttpResponse测试这种行为,因此我保留了该最终查找,以防万一。)
import io
import zipfile
zipped_file = io.BytesIO()
with zipfile.ZipFile(zipped_file, 'w') as f:
for i, file in enumerate(files):
f.writestr("{}.csv".format(i), file.getvalue())
zipped_file.seek(0)