1

我正在使用这个 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”

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

4

1 回答 1

1

csv模块输出对象,而strDjango 使用并期望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 的细节可以在这里找到。

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

于 2013-06-17T20:55:17.203 回答