2013-11-17 4 views
2

Я пытаюсь для проверки загрузки CSV-файла в Джанго со следующим:как проверить форму загрузки 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? 

Я думал, что диалект взял заботиться об этом.

Если я изменяю читатель открыть с флагом Р.У., он работает:

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

Проблема заключается в том, что, поскольку этот файл потоковые, фактический файл полностью отличается от этого локального.

Как передать флаг rU в поточную/загруженную версию файла?

ответ

0

три различных подхода:

  1. Некоторые файлы не записываются в файл при загрузке, в зависимости от размера загрузки файла (FILE_UPLOAD_MAX_MEMORY_SIZE 2,5 тВ по умолчанию). Поэтому, если вы хотите повторно открыть файл с помощью этого флага, вы можете сначала записать файл на диск.
  2. Другая возможность: установить FILE_UPLOAD_MAX_MEMORY_SIZE на 0 и проверить объект, связанный с загружаемым файлом, вы должны иметь возможность получить имя файла, а затем снова открыть его с помощью специального флага.
  3. Использовать splitlines(), как показано в this answer.
Смежные вопросы