2016-01-25 2 views
0

Я новичок в python. И извинения за очень простой вопрос.Преобразование списка строк с u '...' в список нормальных строк

Я работаю с библиотекой python pattern.en и пытаюсь получить синонимы слова. это мой код и работает нормально.

from pattern.en import wordnet 
a=wordnet.synsets('human') 
print a[0].synonyms 

это то, что на выходе я получаю от этого:

[u'homo', u'man', u'human being', u'human'] 

но для моей программы я должен вставить этот массив как это:

['homo', 'man', 'human being', 'human'] 

как я получаю результат, как выше и удалить «u» из моего вывода.

заблаговременно ..!

+0

Вы имеете в виду ваша программа нуждается в список отличных Юникода строк строк? – YCFlame

+0

не нужно удалять 'u' из вашей строки, он отлично работает так же, как строка,' u' представляет строку unicode – Hackaholic

+0

да точно ... и я не знал, что u ссылается на Unicode .. :( –

ответ

3

Попробуйте надлежащий encoding - Но все равно это u не оказывает никакого влияния на данные - это просто явное представление Юникода объекта (не массив байт), если ваш код должен вернуться unicode то лучше кормить его Юникодом.

>>>d = [u'homo', u'man', u'human being', u'human'] 
>>>print [i.encode('utf-8') for i in d] 
>>>['homo', 'man', 'human being', 'human'] 
+0

Это работает, но это не так. Хороший совет. Нет необходимости возвращаться к байтовому представлению массива/строки. Поскольку эквивалентность никогда не является проблемой с unicode vs str в python2, а в python3 str по умолчанию unicode – alvas

+0

@alvas Да, и поэтому я упомянул об этом ('u does не влияют на данные') – SIslam

+1

@Slslam надеюсь, что вы не возражаете, если я смел это =) – alvas

0

Короче:

Там нет необходимости конвертировать вам список юникоды в строки. Они то же самое


При продолжительном:

u'...' префикса в строковом объекте представляет собой объект Unicode, введенный в Python 2.0 см https://docs.python.org/2/tutorial/introduction.html#unicode-strings

Начиная с Python 2.0 новый тип данных для хранения текстовых данных - , доступный программисту: объект Unicode. Его можно использовать для хранения и обработки данных Unicode (см. http://www.unicode.org/), а хорошо интегрируется с существующими строковыми объектами, обеспечивая при необходимости автоконверсии.

И поскольку Python 3.0 см https://docs.python.org/3.2/tutorial/introduction.html#about-unicode:

Начиная с Python 3.0 все строки поддерживают Unicode (см http://www.unicode.org/).

Независимо от того, что тип строки по умолчанию, при проверке эквивалентности, они должны быть такими же, как в 2.x и 3.x Python:

[email protected]:~$ python2 
Python 2.7.11 (default, Dec 15 2015, 16:46:19) 
[GCC 4.8.4] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> type(u'man') 
<type 'unicode'> 
>>> type('man') 
<type 'str'> 
>>> u'man' == 'man' 
True 

[email protected]:~$ python3 
Python 3.4.1 (default, Jun 4 2014, 11:27:44) 
[GCC 4.8.3] on linux 
Type "help", "copyright", "credits" or "license" for more information. 
>>> type(u'man') 
<class 'str'> 
>>> type('man') 
<class 'str'> 
>>> u'man' == 'man' 
True 

И в Python 2, когда вы ДОЛЖНЫ или необходимы для конвертации с unicode в str тип, скажем, для проверки типа или чего-то еще, например:

[email protected]:~$ python3 
>>> u'man' == 'man' 
True 
>>> type(u'man') == type('man') 
True 
>>> exit() 
[email protected]:~$ python2 
>>> u'man' == 'man' 
True 
>>> type(u'man') == type('man') 
False 

, то вы должны быть в состоянии просто бросить его str(u'man') или u'man'.encode('utf-8').

Но могут быть некоторые «боли»/бесконечные ошибки, если ваша строка unicode находится вне диапазона ascii, и вы пытаетесь записать ее в файл или распечатать ее на консоли, которая может не иметь установки по умолчанию для «utf- 8' . В этом случае, смотреть https://www.youtube.com/watch?v=sgHbC6udIqc


Кроме того, здесь подобные вопросы, связанные с u'...' префиксом: