2015-08-12 3 views
1

Я работаю с таблицей excel, используя pandas через ipython. Таблица содержит кириллические слова. Когда я пытаюсь измерить данные, я всегда получаю строки чисел вместо слов. Это выглядит так:Питон и кириллический алфавит

In [16]: report_sorted_geo['country'].unique() 
Out[16]: 
array([u'\u0410\u0431\u0445\u0430\u0437\u0438\u044f', 
     u'\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d', 
     u'\u0410\u0440\u043c\u0435\u043d\u0438\u044f', 
     u'\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c', 
     u'\u0412\u044c\u0435\u0442\u043d\u0430\u043c', 
     u'\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430', 
     u'\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f', 
     u'\u0413\u043e\u043d\u043a\u043e\u043d\u0433', 
     u'\u0413\u0440\u0443\u0437\u0438\u044f', 

Есть ли исправление к этому вопросу?

Когда я просто пытаюсь напечатать что-то вывод в порядке:

In [17]: print "привет" 
привет 

Кто-нибудь знает, как это исправить?

+2

'и '\ u0410 \ u0431 \ u0445 \ u0430 \ u0437 \ u0438 \ u044f'' является юникода' str', так он содержит слово, с этим нет никаких проблем. – Holt

+0

Есть ли способ сделать это слово таким читаемым? – YKY

+0

Ну, это в основном зависит от вашего intrepreter (это строка в unicode, поэтому, возможно, ваш интерпретатор не «распознает» ее) ... Используя 'IPython (3.4) QT Console', ваши выходные слова кода, если я запускаю его с помощью Windows командной строки, я получаю тот же результат, что и вы. Что вы действительно хотите делать с этими линиями? – Holt

ответ

2

Вот один из способов преобразования списков строк, чтобы сделать их более читаемыми в Python 2. Этот код явно кодирует данные Unicode как utf-8 байтов.

#!/usr/bin/env python 

data = [ 
    u'\u0410\u0431\u0445\u0430\u0437\u0438\u044f', 
    u'\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d', 
    u'\u0410\u0440\u043c\u0435\u043d\u0438\u044f', 
    u'\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c', 
    u'\u0412\u044c\u0435\u0442\u043d\u0430\u043c', 
    u'\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430', 
    u'\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f', 
    u'\u0413\u043e\u043d\u043a\u043e\u043d\u0433', 
    u'\u0413\u0440\u0443\u0437\u0438\u044f', 
] 

def list_to_utf8(seq): 
    t = [" u'%s'" % s.encode('utf-8') for s in seq] 
    return '[\n' + ',\n'.join(t) + '\n]' 

print list_to_utf8(data) 

выход

[ 
    u'Абхазия', 
    u'Азербайджан', 
    u'Армения', 
    u'Беларусь', 
    u'Вьетнам', 
    u'Гватемала', 
    u'Германия', 
    u'Гонконг', 
    u'Грузия' 
] 

Чтобы использовать эти данные в коде Python вы должны дать правильный UTF-8 объявление кодировки в верхней части сценария, и вам также должен указать вашему текстовому редактору сохранить файл с помощью кодировки utf-8.

тест

#!/usr/bin/env python 
# -*- coding: utf_8 -*- 

data = [ 
    u'\u0410\u0431\u0445\u0430\u0437\u0438\u044f', 
    u'\u0410\u0437\u0435\u0440\u0431\u0430\u0439\u0434\u0436\u0430\u043d', 
    u'\u0410\u0440\u043c\u0435\u043d\u0438\u044f', 
    u'\u0411\u0435\u043b\u0430\u0440\u0443\u0441\u044c', 
    u'\u0412\u044c\u0435\u0442\u043d\u0430\u043c', 
    u'\u0413\u0432\u0430\u0442\u0435\u043c\u0430\u043b\u0430', 
    u'\u0413\u0435\u0440\u043c\u0430\u043d\u0438\u044f', 
    u'\u0413\u043e\u043d\u043a\u043e\u043d\u0433', 
    u'\u0413\u0440\u0443\u0437\u0438\u044f', 
] 

newdata = [ 
    u'Абхазия', 
    u'Азербайджан', 
    u'Армения', 
    u'Беларусь', 
    u'Вьетнам', 
    u'Гватемала', 
    u'Германия', 
    u'Гонконг', 
    u'Грузия' 
] 

for s1, s2 in zip(data, newdata): 
    print s1 == s2, s1, s2  

выход

True Абхазия Абхазия 
True Азербайджан Азербайджан 
True Армения Армения 
True Беларусь Беларусь 
True Вьетнам Вьетнам 
True Гватемала Гватемала 
True Германия Германия 
True Гонконг Гонконг 
True Грузия Грузия 
+0

Благодарю вас за ответ. На данный момент я буду придерживаться функции преобразования. Кстати, если я решаю переключиться на python 3 в будущем, это поможет с unicode? – YKY

1

Поскольку ваш терминал поддерживает это, почему бы не просто print каждый элемент вашего массива, и пусть Python заботиться о глифах:

In [49]: for e in a: 
    ....:  print e 
    ....:  
Абхазия 
Азербайджан 
Армения 
Беларусь 
Вьетнам 
Гватемала 
Германия 
Гонконг 
Грузия 
+0

Мне нужно будет сделать это, если я не смогу найти лучшее решение. Мне придется немного помассировать этот стол. И печатать каждую запись индивидуально было бы довольно неудобно. – YKY