python: csv.reader & unicode (и postgres) - PullRequest
0 голосов
/ 01 марта 2011

У меня есть CSV с символом Unicode (испанский - символ).Попытка импортировать это в таблицу postgres в кодировке utf8.Следующий код:

reader = csv.reader(open(filename, 'r'), delimiter=',')

for row in reader:
    values = [None if x == '' else x for x in row]
    query = 'INSERT INTO %s.rosters VALUES(%s)' % (self.schema, ','.join(['%s'] * len(values)))
    self.executequery(query, values)

Выход ERROR: invalid byte sequence for encoding "UTF8": 0xf1616461.Итак, изменив его на:

reader = csv.reader(open(filename, 'r'), delimiter=',')

for row in reader:
    values = [None if x == '' else unicode(x, 'utf-8') for x in row]
    query = 'INSERT INTO %s.rosters VALUES(%s)' % (self.schema, ','.join(['%s'] * len(values)))
    self.executequery(query, values)

Выход 'utf8' codec can't decode bytes in position 21-24: invalid data

Есть ли способ решить эту проблему?

update Файл не былUTF-8;это была Windows-1252.Изменение назначения списка значений на:

values = [None if x == '' else unicode(x, 'cp1252') for x in row]

Исправляет проблему!

1 Ответ

1 голос
/ 01 марта 2011

Знаете ли вы, что файл CSV закодирован в UTF-8?Если это так, вы увидите что-то вроде этого:

$ file foo.txt 
foo.txt: UTF-8 Unicode text

Если не указано UTF-8, вам, вероятно, придется декодировать его с помощью другого кодека, такого как ISO-8859-1.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...