【问题标题】:How to write CSV file to zip on the fly如何即时将 CSV 文件写入 zip
【发布时间】: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


【解决方案1】:

你的代码到处都是错误。

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

from io import StringIO
temp_file = StringIO(PROVIDE_ARGUMENT_HERE)

提供论据应该能让你走上解决这个问题的道路。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-25
    • 1970-01-01
    • 1970-01-01
    • 2014-02-04
    • 2017-09-02
    相关资源
    最近更新 更多