【问题标题】:Get header of CSV file in Django ModelForm在 Django ModelForm 中获取 CSV 文件的标题
【发布时间】:2018-09-14 08:39:49
【问题描述】:

我正在构建一个 django 应用程序,它可以让人们上传将存储在 S3 中的 CSV(基于 django-storages),然后由 celery 任务处理,然后将它们摄取到数据库中。

这些 CSV 可以是任意大小,从几行(Django 将其存储为InMemoryUploadedFile)到数百兆字节(django 将使用TemporaryUploadedFile。)

我在通用CreateView 上使用简单的ModelForm,但我想添加一种方法来检查文件(标题)中的第一行,以验证 CSV 是否包含我需要的所有列。

如果我知道文件的路径,这将非常简单。我只是使用 python 的标准文件和 csv 处理功能将第一行读入csv 模块并检查字段。但是我如何使用上传的文件来做到这一点,它可能在内存中,也可能是模型表单中的临时文件?

【问题讨论】:

    标签: python django django-forms django-file-upload


    【解决方案1】:

    这个答案不会为你拼写出来,但应该足以解除你的屏蔽。

    从 Django documentation 的外观来看,您可以使用内置方法获取“TemporaryUploadedFile”的临时文件路径:

    TemporaryUploadedFile.temporary_file_path()
    

    要结束这一切,您必须在代码中包含一些逻辑来识别它是“InMemoryUploadedFile”还是“TemporaryUploadedFile”。从那里,您可以以不同的方式查看每个对象以评估列。

    【讨论】:

    • 啊,所以如果我使用它并专门使用 TemporaryUploadedFiles 我至少可以让它工作。谢谢!这至少让它工作。如果有办法同时使用 InMemoryUploadedFiles 和本地文件,那就太好了。
    • 有一种方法,你只需要使用条件语句来决定使用哪个代码。顺便问一下,你能把这个答案标记为正确吗?
    猜你喜欢
    • 2022-06-13
    • 2018-05-09
    • 2021-08-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-24
    • 2018-01-18
    • 2022-01-11
    相关资源
    最近更新 更多