我正在使用此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 - - 但问题仍然存在。
答案 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,因此这里不需要它。