【发布时间】:2021-04-30 03:00:03
【问题描述】:
def download_csv(self, prepared_data):
file_name = self.get_file_name(self.request.query_params.get('model'), 'csv')
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="{}"'.format(file_name)
writer = csv.writer(response)
writer.writerow(prepared_data.get('labels'))
for data in prepared_data.get('data'):
writer.writerow(data)
return response
这是从网站中提取 CSV 格式数据的原始代码。
现在我需要添加一些限制,如果超出限制,请创建一个包含 CSV 文件的 zip 文件。例如,如果限制为 10 并且我有 23 行数据,则一个 zip 文件将包含 3 个 CSV 文件。
我正在尝试实现此代码:
def download_csv(self, prepared_data):
file_name = self.get_file_name(self.request.query_params.get('model'), 'csv')
response = HttpResponse(content_type='text/csv')
response['Content-Disposition'] = 'attachment; filename="{}"'.format(file_name)
from io import StringIO
limit = 2
if len(prepared_data.get('data')) > limit:
temp_file = StringIO()
comp_file = zipfile.ZipFile(temp_file, 'w')
for _ in range(int(len(prepared_data.get('data'))/limit)):
writer = csv.writer(response)
writer.writerow(prepared_data.get('labels'))
for data in prepared_data.get('data'):
writer.writerow(data)
comp_file.writestr(data=writer, compress_type=zipfile.ZIP_DEFLATED)
comp_file.close()
writer = csv.writer(response)
writer.writerow(prepared_data.get('labels'))
for data in prepared_data.get('data'):
writer.writerow(data)
return response
但它失败并出现错误"path should be string, bytes, os.PathLike or integer, not _csv.writer"
我需要完成的就是让 CSV 文件写入 zipfile。对于任何帮助或提示,我将不胜感激。谢谢
【问题讨论】:
-
看看this线程。
-
你能添加完整的堆栈跟踪吗?
标签: python django csv zip zipfile