Уведомления

Группа в Telegram: @pythonsu

#1 Дек. 14, 2008 11:27:45

Omro
От:
Зарегистрирован: 2008-12-14
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование unicode-строки к списку

Есть словарь Зализняка (http://speakrus.ru/dict/index.htm) txt.
По нему нужен удобный поиск (по множеству критериев). Но мучая поиск, я игрался без текстовика. Просто со списками, вбитыми в код.

Потом отчасти разобрался с юникодом. В итоге - эта часть:

import codecs
s = codecs.open(“zdf-win.txt”, encoding=“cp1251”)
data = s.read()
print data

Но как это теперь преобразовать в список, удобоваримый для питона?
И подходит для скольки килобайт список (или мегабайт) максимум?



Офлайн

#2 Дек. 14, 2008 12:54:08

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Преобразование unicode-строки к списку

Вот так, например:

import codecs
fp = codecs.open("zdb-win.txt", encoding="cp1251")
lines = [line.strip() for line in fp]
fp.close()



Офлайн

#3 Дек. 14, 2008 17:48:43

Omro
От:
Зарегистрирован: 2008-12-14
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование unicode-строки к списку

Прекрасно работает, но выдаёт всё как unicode - строки в списке (u'\u****\', u'\u****\'… но не по одному символу там). А как в списке получить форму данных, с которыми можно работать по по-обычному, перенося элемент списка далее в строку и вытаскивая часть символов? Ведь в них ещё поиск вести надо.



Офлайн

#4 Дек. 14, 2008 20:41:57

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Преобразование unicode-строки к списку

не совсем понятно что вы хотите :(
Список из примера - это список строк из вашего файла. Если вас смущает unicode, то не используйте codec, просто открывайте файл функцией open и вперед :)
Если вам нужны не строки, а списки символов, то читайте так:

lines = [list(line.strip()) for line in fp]
Будет вам список списков символов, а не список строк.

Обратное преобразование списка символов в строку делайте с помощью ''.join(ваш список)



Офлайн

#5 Дек. 14, 2008 20:51:14

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Преобразование unicode-строки к списку

Я наверное таки понял что вы хотите. Просто список символов, не разбивая на строки?
Вам просто нужно строку, которую вы прочитали из файла преобразовать в список, вот так:

data = list(s.read())



Офлайн

#6 Дек. 14, 2008 21:40:04

Omro
От:
Зарегистрирован: 2008-12-14
Сообщения: 27
Репутация: +  0  -
Профиль   Отправить e-mail  

Преобразование unicode-строки к списку

Сорри :)

>>>print lines
>>>print lines
-де
[u'-\u0434\u0435', u'-\u043a\u0430', u'-\u043b\u0438\u0431\u043e', u'-\u043d\u04
38\u0431\u0443\u0434\u044c', u'-\u0441']

WTH?
Вот в чём вопрос - почему питон выдаёт всё в разных представлениях символов?
XD



Офлайн

#7 Дек. 15, 2008 08:38:02

Ed
От:
Зарегистрирован: 2008-12-13
Сообщения: 1032
Репутация: +  13  -
Профиль   Отправить e-mail  

Преобразование unicode-строки к списку

Потому, что print конвертирует то, что вы ему даете в строку: http://docs.python.org/reference/simple_stmts.html#the-print-statement.
В случае уникода у вас и получается обычная строка, в случае списка строк уникода - список строк уникода :)



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version