Django - 文件上传:以文本而不是字节打开文件

时间:2014-08-14 12:27:46

标签: python django csv encoding utf-8

在Python 3.3和Django 1.6上

在ModelForm的视图中,是否可以将上传的文件作为文本文件而不是字节打开?

以下是一些示例代码:

def post(self, request, *args, **kwargs):
    """
    Methode POST
    Utilisé lors de l'envoie du formulaire
    :return: Soit un message de succès, soit le formulaire retourné avec erreurs
    """
    form = FormulaireUploadFichierDonnee(request.POST, request.FILES)

    if form.is_valid():
        fichier = request.FILES['fichier']
        volet = form.cleaned_data['volet']

        validateur = ValidateurFactory.factory(volet)

        compteur_erreurs = 0
        liste_obj = []
        liste_erreurs = []

        for ligne in fichier.readlines():
            validateur.ligne = ligne.split('\t')
            obj =  validateur.creer_objet()
            if obj:
                liste_obj.append(obj)
            else:
                compteur_erreurs += 1
                liste_erreurs.append(ligne)

        if liste_obj:
            instance = UploadFichierDonnees(fichier=request.FILES['fichier'])
            instance.utilisateur = request.user
            instance.save()
            return HttpResponse(str(liste_obj) + "<br> Erreurs: " + str(compteur_erreurs))
        else:
            return HttpResponse(str(liste_erreurs) + "<br> Erreurs: " + str(compteur_erreurs))

    else:
        return render(request, 'tabstat/vue_ajout_fichier.html', {
            'form': form,
        })

基本上我需要遍历文件中的每一行,在选项卡上拆分它们并使用验证器处理来自那里的数据。问题是我无法获取字符串对象,我得到一个字节字符串。

我尝试用.decode('utf-8')解码它:

UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 62: invalid continuation byte

.decode('ascii')

'ascii' codec can't decode byte 0xe9 in position 62: ordinal not in range(128)

,没有成功。我尝试使用CSV阅读器(因为它是一个CSV文件),但它也拒绝使用。

1 个答案:

答案 0 :(得分:0)

好吧,这似乎只是一个编码问题。

尝试了其他解码模式,发现latin-1是正确的。