2013-06-17 3 views
1

J'utilise ce script python pour importer toutes les données dans mon application à partir d'un fichier CSV.Importer CSV Utf-8

# -*- encoding: utf-8 -*- 
#CSV ubication 
csv_filename="route" 
#django 
ruta_django="route" 
ruta_project = "route" 

import sys,os 
sys.path.append(ruta_django) 
sys.path.append(ruta_project) 
os.environ['DJANGO_SETTINGS_MODULE'] = 'settings' 

from gestion.models import Cliente, Oficina, Departamento 

import csv 
lectorCSV = csv.reader(open(csv_filename), delimiter=';', quotechar='"') 

for fila in lectorCSV: 
     if fila[0] != 'cliente': 
       departamento = Departamento() 
       c = Cliente.objects.filter(nombre=fila[0]) 
       o = Oficina.objects.filter(nombre=fila[1],cliente_id=c[0].pk) 
       departamento.cliente_id = c[0].pk 
       departamento.oficina_id = o[0].pk 
       departamento.nombre_departamento = fila[2] 
       try: 
         departamento.save() 
       except: 
         pass 

Dans le fichier CSV, il y a des mots comme "Administración" et quand il enregistre dans la base de données, il apparaît comme:

j'ai essayé aveC# - - encodage "Administraci n?": Utf-8 - - mais le problème persiste.

+0

Votre fichier csv est-il sauvegardé sous forme de codage "utf-8"? – lalo

Répondre

1

Le module csv génère str objets, alors que Django utilise et attend des chaînes unicode. Vous devez convertir les chaînes du document CSV en chaînes Unicode.

Si votre CSV contient des chaînes codées UTF-8, utilisez .decode('utf-8'):

c = Cliente.objects.filter(nombre=fila[0].decode('utf-8')) 
o = Oficina.objects.filter(nombre=fila[1].decode('utf-8'), ... 

Vous pouvez remplacer 'utf-8' avec un autre encodage, bien sûr. Plus de détails sur unicode et str peuvent être trouvés here.

L'en-tête # -*- encoding: utf-8 -*- est utilisé pour déterminer le codage des chaînes dans le code source du fichier en cours, si elles contiennent des caractères spéciaux. Comme toutes les chaînes du code sont ASCII simples, elles ne sont pas obligatoires ici.