【问题标题】:how to validate csv upload form in django如何在 django 中验证 csv 上传表单
【发布时间】:2013-11-30 07:51:35
【问题描述】:

我正在尝试使用以下内容在 django 中验证 csv 文件上传:

class CSVUploadForm(forms.Form):
    csv_file = forms.FileField(label='Select a CSV file to import:',)

    def clean(self):
        print 'clean'
        file_csv = self.cleaned_data['csv_file']
        records = csv.reader(file_csv, dialect=csv.excel_tab)
        for row in records:
            print ', '.join(row)

我得到错误:

new-line character seen in unquoted field - do you need to open the file in universal-newline mode?

我认为方言可以解决这个问题。

如果我将阅读器更改为使用 rU 标志打开,它可以工作:

records = csv.reader(open('/mylocalpath/'+file_csv.name, 'rU'), dialect=csv.excel_tab)

问题在于,由于该文件是流式传输的,因此实际文件与本地文件完全不同。

如何将 rU 标志传递给文件的流式传输/上传版本?

【问题讨论】:

    标签: python django csv django-forms


    【解决方案1】:

    三种不同的方法:

    1. 某些文件在上传时不会写入文件,具体取决于文件上传大小(FILE_UPLOAD_MAX_MEMORY_SIZE 默认为 2.5 mB)。因此,如果您想使用该标志重新打开文件,您可以先将文件写入磁盘。
    2. 另一种可能性是将 FILE_UPLOAD_MAX_MEMORY_SIZE 设置为 0 并检查链接到上传文件的对象,您应该能够获取文件名,然后使用特殊标志重新打开它。
    3. 使用splitlines(),如this answer 中所示。

    【讨论】:

      猜你喜欢
      • 2023-04-10
      • 2011-06-29
      • 2021-09-19
      • 2011-01-31
      • 1970-01-01
      • 2017-11-28
      • 1970-01-01
      • 2010-09-22
      • 2019-02-25
      相关资源
      最近更新 更多