【发布时间】:2023-03-06 19:17:02
【问题描述】:
我想将一些 csv 缓冲区压缩到一个新的 zip 缓冲区中,如下所示(python 2.7):
files = []
csv_buffer = StringIO.StringIO()
writer = csv.writer(csv_buffer)
writer.writerow(["some", "csv", "data"])
csv_buffer.seek(0)
files.append(csv_buffer)
zipped_file = io.BytesIO()
with zipfile.ZipFile(zipped_file, 'w') as zipper:
for i, csv_file in enumerate(files):
csv_file.seek(0)
zipper.writestr("{}.csv".format(i), csv_file.read())
zipped_file.seek(0)
然后我通过 Django 视图调度生成的缓冲区以进行下载。但是,如果我打开 zip,我会找到一个文件 (0.csv),但它的编码不正确。我想将其编码为 UTF-8。
我也尝试如下:
zipper.writestr("{}.csv".format(i), csv_file.read().encode("utf-8"))
但这并没有什么不同。也在变化
zipped_file = io.BytesIO()
到
zipped_file = StringIO.StringIO()
没有帮助。 任何关于出了什么问题的想法将不胜感激!
编辑:我的解决方案
尽管下面给出了其他有用且有趣的答案,但我通过更改解决了这个问题
zipper.writestr("{}.csv".format(i), csv_file.read())
到
zipper.writestr(zipfile.Zipinfo("foo.csv"), csv_file.read())
不知道为什么,但这让它起作用了
【问题讨论】:
标签: python django python-2.7 csv zipfile