2015-10-13 4 views
1

Я пробовал все, но unicode просто не исчезает.Python: не удалось преобразовать unicode в строку

    col = "[u'$929.95']" 
        unicoded_item = to_unicode(col) # [u'test'] 

        print type(unicoded_item) # <type 'unicode'> 
        if isinstance(unicoded_item, unicode): 
         unicoded_item = unicoded_item.encode('utf8') 
         print str(unicoded_item) # [u'test'] 

я ожидал весь [u' и '] исчезнуть, но он просто не кажется, чтобы преобразовать. Поэтому, когда я сохранить эту строку в текстовый файл, текстовый файл будет буквально все юникода питон характер [u'test'] буквально написано вместо test

+0

для уточнения: вы получаете '[u'test ']' или 'u'test''? – cg909

+0

Это потому, что у вас есть то, что похоже на строковое представление _list_, а не на строку. Что вы получаете, когда печатаете 'print (col [0])'? «Тест» или «Тест»? –

+0

@ c909 yes get '[u'test ']' – user299709

ответ

3

У вас есть строка, представляющая объект списка. Самый простой способ, чтобы получить эту вещь выясняли, чтобы оценить строку, чтобы получить объект из:

>>> import ast 
>>> col = "[u'$929.95']" 
>>> col2 = ast.literal_eval(col) 
>>> type(col) 
<type 'str'> 
>>> type(col2) 
<type 'list'> 
>>> col2[0] 
u'$929.95' 
>>> str(col2[0]) 
'$929.95' 
+0

вещь иногда значение col является чистым, что означает '$ 929,95', я не могу контролировать, какой тип данных в конечном итоге проходит, так что мне кажется, что мне нужно реализовать это – user299709

1

Он не может справиться с проблемой напрямую, но вы можете использовать заменить () функция для обмена [u' впустую.

+0

На самом деле это не плохое решение, но я думаю, что проблема связана с конечным ''] ' – user299709

2

Переменная col, вероятно, содержит список с одним элементом строки unicode.

unicoded_item = to_unicode(col) затем создает строку юникода с представлением этого списка: u"[u'test']".

Затем вы преобразовываете эту строку в строку с помощью unicoded_item.encode('utf8').

Это дает вам (байтовую) строку "[u'test']".

Решение состоит в том, чтобы получить доступ к элементу (элементам) в col вместо преобразования всего col. Если col всегда содержит ровно один элемент, вы можете просто заменить использование colcol[0].

+0

тем, что я нашел, было то, что col уже был строкой. это не список. поэтому я преобразовывал строку как '[u '$ 449.97']' в unicode. необходимо преобразовать строковое представление юникода, в unicode, а затем вернуться к строке. – user299709

+0

Итак, пожалуйста, добавьте больше кода в свой следующий вопрос. Поскольку вы не предоставляли задание, приводящее к 'col', все здесь могли только догадываться о причине вашего результата. – cg909

+0

@ c909 Я сделал это.Я думаю, что могу просто извлечь материал между текстами – user299709

0

вы не являетесь unicode. Это обычная строка. Вы можете получить доллар сумму, как это:

res = "[u'$929.95']".split("\'",)[1] 
print(res) 

$929.95 

, но если бы это было Юникод с u'someletters, чтобы удалить и»побежали ули() на юникод ул. .

+0

@PadraicCunningham Я попробовал и получил «. Что касается раскола, да, это моя дурная привычка, которую ты всегда меняешь. Но на одном разделителе re.split избыточен, конечно, так что изменились благодаря вам за замечание обычного раскола. – LetzerWille

+0

python3. OP tag указывает на python без версии – LetzerWille

Смежные вопросы