2014-09-11 2 views
1

Я застрял часами в этой проблеме csv. Следующий код выполняется после того, как форма размещена:Как читать CSV-файл с POST?

fichier_en_lecture = request.FILES['fichier_csv'].read() 
nom_du_fichier = request.FILES['fichier_csv'].name 
importateur = request.user 
traitement_du_fichier(fichier_en_lecture, importateur) 

И функция "traitement_du_fichier" выглядит следующим образом:

def traitement_du_fichier(fichier_en_lecture, nom_du_fichier, importateur): 
    nouveau_fichier = FichierAdhérents(importateur=importateur, fichier_csv=nom_du_fichier) 
    nouveau_fichier.save() 
    import csv 
    lecteur = csv.reader(fichier_en_lecture, delimiter=",", quotechar='|') 
    for row in lecteur: 
     nouvel_adhérent = AdhérentDuFichier() 
     nouvel_adhérent['fichier_adhérents'] = nouveau_fichier 
     column_counter = 0 
     nouvel_adhérent['fédération'] = row[column_counter] 
     column_counter += 1 
     nouvel_adhérent['date_première_adhésion'] = row[column_counter] 
     column_counter += 1 
     nouvel_adhérent['date_dernière_cotisation'] = row[column_counter] 

Я получаю следующее сообщение об ошибке:

iterator should return strings, not int (did you open the file in text mode?) 

Я ve попытался использовать open(), но из того, что я понимаю, open() работает только с прямым путем к загруженному файлу. Однако мне нужно сделать это из памяти.

ответ

3

В Python 3, я использовал:

import csv 
from io import StringIO 
csvf = StringIO(xls_file.read().decode()) 
reader = csv.reader(csvf, delimiter=',') 

xls_file быть файл получил от формы POST. Надеюсь, это поможет.

Смежные вопросы