1

このcsvの問題で何時間も立ち往生しています。次のコードは、フォームが投稿された後に実行されます。

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?)

open() を使用しようとしましたが、私が理解していることから、open() はアップロードされたファイルへの直接パスでのみ機能します。ただし、メモリからこれを行う必要があります。

4

1 に答える 1

6

Python 3では、次を使用しました:

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

xls_file は、POST フォームから取得したファイルです。お役に立てば幸いです。

于 2015-03-27T19:47:49.547 に答える