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モジュール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 の詳細については、こちらを参照してください

# -*- encoding: utf-8 -*-ヘッダーは、現在のファイルのソース コード内の文字列のエンコーディングを決定するために使用されます(文字列に特殊文字が含まれている場合)。コード内のすべての文字列は単純な ASCII であるため、ここでは必要ありません。

于 2013-06-17T20:55:17.203 に答える