导入CSV Utf-8

时间:2013-06-17 10:44:55

标签: mysql django django-admin

我正在使用此python脚本将所有数据导入我的应用程序,形成CSV文件。

# -*- 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

在CSV文件中有“administración”之类的字样,当它保存在数据库中时,它显示为:“Administraci?n”

我尝试使用# - - 编码:utf-8 - - 但问题仍然存在。

1 个答案:

答案 0 :(得分:1)

csv模块输出str个对象,Django使用并期望unicode个字符串。您需要将CSV文档中的字符串转换为unicode字符串。

如果您的CSV包含UTF-8编码字符串,请使用.decode('utf-8')

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

当然,你可以用其他编码替换'utf-8'。有关unicode和str的更多详细信息,请参见here

# -*- encoding: utf-8 -*-标头用于确定当前文件源代码中字符串的编码,如果它们包含特殊字符。由于代码中的所有字符串都是简单的ASCII,因此这里不需要它。