Форум сайта python.su
0
есть mystem
запускаю его
mystem -n -w -l doc.txt out.txtполучаю построчный файл, что то типа
вымышлятьпотом читаю построчно на питоне
тем|тема|то|тот
не
мало|менее|меней
ins = open( "out.txt", "r" ) words = [] for line in ins: words.append( line ) ins.close() print len(words)
words[11]
Отредактировано mrgloom (Ноя. 12, 2013 15:56:33)
Офлайн
0
причем
import sys print sys.stdout.encoding # выдает cp866
ins = open( "out.txt", "r" ) words = [] s=0 for line in ins: if (s<10): print line.encode('cp866') #what encoding? s=s+1 words.append( line ) ins.close() print len(words)
Отредактировано mrgloom (Ноя. 12, 2013 15:55:44)
Офлайн
считывать чтоб до разделителя есть
split('|')
Отредактировано dimy44 (Ноя. 12, 2013 16:51:31)
Офлайн
20
`line.encode('cp866')` – ну сама `line` же при этом `str`? Т.е. она уже закодирована в какую-то неизвестную кодировку (что там mystem рожает). Если пытаться кодировать `str`, то она сначала будет декодирована как “ascii”, а затем закодирована указанной кодировкой.
Судя по всему исходный файл не “cp866” иначе бы не возникло проблемы в первом посту. dimy44 уже написал что нужно сделать (попробуйте не кодировать `unicode` для `print`а, кажется уже нет проблемы у Python с определением кодировки терминала, сам всё сделает, если нет, то придётся помогать), добавлю только, что если нет надёжных источников о том, какая же исходная кодировка, можно попробовать магию в лице пакета `chardet`.
p.s. Вместо "ins = open(…) ins.close()“, можно делать ”with open(…) as ins: ".
..bw
Офлайн
0
файл out.txt я посмотрел через notepad++ у него стоит кодировка ANSI
а
import sys print sys.stdout.encoding
print line.decode('utf-8').encode('cp866')
Отредактировано mrgloom (Ноя. 13, 2013 09:18:16)
Офлайн
0
причем если в notepad++ сделать convert to UTF-8 (текст виден нормально), а потом encoding in ANSI (текст виден в неправильной кодировке) и попытаться его вывести
print line.decode('utf-8')
Офлайн
0
with codecs.open('out.txt',encoding='cp1251')
ins = open( "out.txt", "r") words = [] s=0 for line in ins: if (s<10): print line.decode('cp1251') s=s+1 words.append( line ) ins.close()
Офлайн
Такого рода вопросы вынуждают участников форума делать выводы на основе предположений, тогда как имея исходные данные данная проблема даже методом тыка за 10 минут решается на месте.
Офлайн
0
да дело то понятно что было в кодировке, только явно указывать кодировку это какое то не гибкое решение и вообще есть предположение что это причуды винды, что в файле и в консоли разные кодировки.
и в notepad++ явно не было указано cp1251, а было ANSI.
Офлайн