如何编写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)
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。我将真诚地感谢任何帮助或提示。由于

你的代码到处都是错误。

我首先看到的是,您导入了StringIO,但在调用temp_file函数时没有提供参数:

from io import StringIO
temp_file = StringIO(PROVIDE_ARGUMENT_HERE)

提供这个参数应该会让你走上解决这个问题的道路。

最新更新