Форум сайта python.su
Есть словарь Зализняка (http://speakrus.ru/dict/index.htm) txt.
По нему нужен удобный поиск (по множеству критериев). Но мучая поиск, я игрался без текстовика. Просто со списками, вбитыми в код.
Потом отчасти разобрался с юникодом. В итоге - эта часть:
import codecs
s = codecs.open(“zdf-win.txt”, encoding=“cp1251”)
data = s.read()
print data
Но как это теперь преобразовать в список, удобоваримый для питона?
И подходит для скольки килобайт список (или мегабайт) максимум?
Офлайн
Вот так, например:
import codecs
fp = codecs.open("zdb-win.txt", encoding="cp1251")
lines = [line.strip() for line in fp]
fp.close()
Офлайн
Прекрасно работает, но выдаёт всё как unicode - строки в списке (u'\u****\', u'\u****\'… но не по одному символу там). А как в списке получить форму данных, с которыми можно работать по по-обычному, перенося элемент списка далее в строку и вытаскивая часть символов? Ведь в них ещё поиск вести надо.
Офлайн
не совсем понятно что вы хотите :(
Список из примера - это список строк из вашего файла. Если вас смущает unicode, то не используйте codec, просто открывайте файл функцией open и вперед :)
Если вам нужны не строки, а списки символов, то читайте так:
lines = [list(line.strip()) for line in fp]
Офлайн
Я наверное таки понял что вы хотите. Просто список символов, не разбивая на строки?
Вам просто нужно строку, которую вы прочитали из файла преобразовать в список, вот так:
data = list(s.read())
Офлайн
Сорри :)
>>>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
Офлайн
Потому, что print конвертирует то, что вы ему даете в строку: http://docs.python.org/reference/simple_stmts.html#the-print-statement.
В случае уникода у вас и получается обычная строка, в случае списка строк уникода - список строк уникода :)
Офлайн