Уведомления

Группа в Telegram: @pythonsu

#1 Май 24, 2011 23:21:18

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

codecs

:)
codec.open открывает файл, и указыват, что при чтении файл будет перекодироваться из указанной кодировки в юникод…
в какой кодировке у вас файл?
split разбирвает строку по разделителю и возвращает массив строк
что есть words?
нам нужно выводить не массив а отдельные строки.
как взять один элемент из массива?
а в цикле?
если всё хорошо, то принт нормально выведет строку в юникоде (строку, а не массив)



Отредактировано (Май 24, 2011 23:24:33)

Офлайн

#2 Май 24, 2011 23:38:15

verec
От:
Зарегистрирован: 2011-05-24
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

codecs

так, открывая через lister в total commander и выбирая кодировку кириллическая(windows) для файла, файл отображается корректно, значит у файла кодировка windows-1251
получается, что f.read() должен вернуть весь текст из файла как unicode строку
тогда после применения text.split() в цщквы должен получиться list из слов в строке text
а значит words теперь содержит все слова из текста в unicode
но почему при выводе в консоль русские слова печатаются как коды?



Офлайн

#3 Май 24, 2011 23:42:46

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

codecs

:)
т.е. words - это список слов
print words - выводит список слов, но как я писал выше, принт нормально может вывести строку, а не список…
внимание вопрос:
как нам вывести строку? (ещё раз, строку, а не список строк)



Офлайн

#4 Май 24, 2011 23:57:43

InPython
От:
Зарегистрирован: 2011-01-31
Сообщения: 69
Репутация: +  0  -
Профиль   Отправить e-mail  

codecs

str(words)



Офлайн

#5 Май 25, 2011 00:06:11

verec
От:
Зарегистрирован: 2011-05-24
Сообщения: 7
Репутация: +  0  -
Профиль   Отправить e-mail  

codecs

как простую строчку вывести я знаю, но вот почему юникодовая строчка не выводится не понимаю

сейчас попробовал сделать вывод в файл вот так и вроде всё нормально получается

f = codecs.open(doc, 'r', "windows-1251")
text = f.read()
words = text.split()
output_file = codecs.open(".../temp_debug.txt", "a", "utf-8")
for w in words:
output_file.write(w)
output_file.close()
но если делаю так
f = codecs.open(doc, 'r', "windows-1251")
text = f.read()
words = text.split()
output_file = codecs.open(".../temp_debug.txt", "a", "utf-8")
for w in words:
print w
#output_file.write(w)
output_file.close()
то выдаёт такую диагностику
print w
File “C:\Program Files\Python26\lib\encodings\cp866.py”, line 12, in encode
return codecs.charmap_encode(input,errors,encoding_map)
UnicodeEncodeError: ‘charmap’ codec can't encode character u'\xbb' in position 0
: character maps to <undefined>



Офлайн

#6 Май 25, 2011 00:12:21

ofigetitelno
От:
Зарегистрирован: 2006-08-01
Сообщения: 136
Репутация: +  0  -
Профиль   Отправить e-mail  

codecs

:)
начните с простого…
print u'юникод'.encode('cp866')
print u'юникод'
работает - хорошо
не работает - какая-то фигня с настройкой консоли



Офлайн

Board footer

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

Powered by DjangoBB

Lo-Fi Version