如何在django中验证csv上传表单

时间:2013-11-17 01:41:17

标签: python django csv django-forms

我正在尝试使用以下内容验证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标志传递给文件的流式传输/上传版本?

1 个答案:

答案 0 :(得分:0)

三种不同的方法:

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