Psixo
Ноя. 15, 2008 05:57:05
Насколько корректно Питон работает со словарями ключи которых в utf-8 ?
Мне так и не удалось (после загрузки из файла в словарь), обратиться ни к одному элементу по его ключу, вылетает KeyError. Хотя указаные ключ в словаре наличествует.
Андрей Светлов
Ноя. 15, 2008 06:09:18
Очень корректно. Вероятно, ключ наличествовал лишь в воображении Psixo (проблемы правильной работы с unicode тоже возможны).
Чтобы говорить предметно, нужен пример кода.
Подсказка: попытка вывести на коноль получившийся после загрузки dict может сильно облегчить понимание.
regall
Ноя. 15, 2008 14:20:49
Psixo - пересмотри еще раз свой код. Я, например работаю ИСКЛЮЧИТЕЛЬНО в utf-8 и все нормально, я даже в пресловутом ‘site.py’ изменил defaultencoding на utf-8, и все нормально работает….
Так что это проблема не а Python и тут я с Андреем согласен - нужен код.
Psixo
Ноя. 17, 2008 02:09:25
Хм. Задача стоит примерно такая: загрузить 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 с этим как-то проще.
Александр Кошелев
Ноя. 17, 2008 02:14:51
Так у вас тут уникод, а не UTF8…
shiza
Ноя. 17, 2008 02:41:36
Хм. не поленился проверить по приведенному тобой коду. У меня все нормально отрабатывает ( и скрипт, и csv - оба в UTF-8).
Есть предположение, что читаемый тобою UTF8 файл содержит метку BOM, которая попадает в ключ, берущийся из первой строки.
Сохрани csv без этой метки.
Или, для проверки, попробуй ключ, который находится не на первой строке.
Psixo
Ноя. 17, 2008 02:48:46
Daevaorn, сначало пытался работать с utf-8, затем уже перевёл в юникод,но проблемы остались.
Попробую сохранить словарь в отдельный файл и посмотреть будут ли в нём ключи к которым пытаюсь обратиться (должны быть если чтение прошло корректно)