Уведомления

Группа в Telegram: @pythonsu

#1 Ноя. 15, 2008 05:57:05

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

Ключи словаря в utf-8

Насколько корректно Питон работает со словарями ключи которых в utf-8 ?
Мне так и не удалось (после загрузки из файла в словарь), обратиться ни к одному элементу по его ключу, вылетает KeyError. Хотя указаные ключ в словаре наличествует.



Офлайн

#2 Ноя. 15, 2008 06:09:18

Андрей Светлов
От:
Зарегистрирован: 2007-05-15
Сообщения: 3137
Репутация: +  14  -
Профиль   Адрес электронной почты  

Ключи словаря в utf-8

Очень корректно. Вероятно, ключ наличествовал лишь в воображении Psixo (проблемы правильной работы с unicode тоже возможны).
Чтобы говорить предметно, нужен пример кода.
Подсказка: попытка вывести на коноль получившийся после загрузки dict может сильно облегчить понимание.



Офлайн

#3 Ноя. 15, 2008 14:20:49

regall
От: Киев
Зарегистрирован: 2008-07-17
Сообщения: 1583
Репутация: +  3  -
Профиль   Отправить e-mail  

Ключи словаря в utf-8

Psixo - пересмотри еще раз свой код. Я, например работаю ИСКЛЮЧИТЕЛЬНО в utf-8 и все нормально, я даже в пресловутом ‘site.py’ изменил defaultencoding на utf-8, и все нормально работает….
Так что это проблема не а Python и тут я с Андреем согласен - нужен код.



Офлайн

#4 Ноя. 17, 2008 02:09:25

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

Ключи словаря в utf-8

Хм. Задача стоит примерно такая: загрузить csv файл с данными в utf-8 в словарь, затем в программе идёт обращение к различным элементам словаря по их ключам.
Я попытался это сделать примерно так:

	base = {}
F = open(base_name, "rb")
sinonim_base = csv.reader(F)
for row in sinonim_base:
if len(row) > 1:
base[unicode(row[0].strip(), 'utf-8')] = unicode(row[1].strip(), 'utf-8')
F.close()
Загрузка происходит без проблем,но обратиться к элементам словаря я не могу:

print "Sinonim: ",  base[u"слово которое точно есть в словаре %)"]
Вылетает KeyError.
Честно говоря с кодировками в Питоне происходит нечто непонятное, часто вылезают проблемы откуда их совершенно не ждёшь. В PHP и Perl с этим как-то проще.



Офлайн

#5 Ноя. 17, 2008 02:14:51

Александр Кошелев
От: Москва
Зарегистрирован: 2007-02-03
Сообщения: 1724
Репутация: +  2  -
Профиль   Отправить e-mail  

Ключи словаря в utf-8

Так у вас тут уникод, а не UTF8…



Офлайн

#6 Ноя. 17, 2008 02:41:36

shiza
От:
Зарегистрирован: 2007-07-03
Сообщения: 1073
Репутация: +  0  -
Профиль   Отправить e-mail  

Ключи словаря в utf-8

Хм. не поленился проверить по приведенному тобой коду. У меня все нормально отрабатывает ( и скрипт, и csv - оба в UTF-8).

Есть предположение, что читаемый тобою UTF8 файл содержит метку BOM, которая попадает в ключ, берущийся из первой строки.
Сохрани csv без этой метки.
Или, для проверки, попробуй ключ, который находится не на первой строке.



Отредактировано (Ноя. 17, 2008 02:51:05)

Офлайн

#7 Ноя. 17, 2008 02:48:46

Psixo
От:
Зарегистрирован: 2007-09-12
Сообщения: 113
Репутация: +  0  -
Профиль   Отправить e-mail  

Ключи словаря в utf-8

Daevaorn, сначало пытался работать с utf-8, затем уже перевёл в юникод,но проблемы остались.

Попробую сохранить словарь в отдельный файл и посмотреть будут ли в нём ключи к которым пытаюсь обратиться (должны быть если чтение прошло корректно)



Офлайн

Board footer

Модераторировать

Powered by DjangoBB

Lo-Fi Version