2013-12-19 3 views
5

У меня есть столбцы в таблице данных, в которой мне нужно присоединиться. Один столбец состоит из значений и других соответствующих значений ошибок, например:Вставка символа юникода с использованием .join()

50.21 0.03 
43.23 0.06 
23.65 1.20 
12.22 0.06 
11.25 2.21 

То, что я хотел бы сделать это, для каждой строки, присоединиться столбцы вместе с +/-, но чистый юникода характер (U + 00B1). Я никогда не пытался использовать символы юникода в python раньше, так что я немного потрясен.

Если мои .join() выглядит как

"<unicode here>".join(item) 

как именно я позволяю питон знаю, что я хочу использовать юникод характер.

+1

Как примечание стороны, если вы хотите, чтобы начать обучение Unicode в Python сейчас, вы должны рассмотреть вопрос о переходе на Python 3.x первым. Изучение Unicode в 3.x намного проще (и многое другое, поэтому половина того, что вы узнаете для 2.x сегодня, даже не будет в 3.x). – abarnert

+0

Да, я подумывал сделать переключатель. Это еще одна причина сделать это, я думаю. Спасибо за предложение. – Matt

+0

Пока вы на нем читаете Unicode HOWTO для [2.7] (http://docs.python.org/2/howto/unicode.html) и для [3.x] (http: //docs.python .org/3/howto/unicode.html), вероятно, стоит того. Эндрю Кучлинг хорошо объясняет, и есть хорошие ссылки на другие ресурсы. – abarnert

ответ

6

Если вы хотите присоединиться к юникода, использовать юникод строку:

u'\u00b1'.join(item) 

Это предполагать, что item представляет собой последовательность строк ; байтовые строки или строки Unicode. Строки байтов будут принудительно использоваться для юникода для вас, с кодеком ASCII.

Было бы лучше явно превратить ваши значения в строки Юникода, таким образом вы сможете контролировать, какая кодировка используется.

Demo с str значениями:

>>> items = [r.split() for r in '''\ 
... 50.21 0.03 
... 43.23 0.06 
... 23.65 1.20 
... 12.22 0.06 
... 11.25 2.21 
... '''.splitlines()] 
>>> items 
[['50.21', '0.03'], ['43.23', '0.06'], ['23.65', '1.20'], ['12.22', '0.06'], ['11.25', '2.21']] 
>>> for item in items: 
...  print u'\u00b1'.join(item) 
... 
50.21±0.03 
43.23±0.06 
23.65±1.20 
12.22±0.06 
11.25±2.21 
+0

Awesome. Мой сценарий pre-unicode очень похож на ваш, однако, когда я пытаюсь 'print'' u \ u00b1'', я получаю это: 'UnicodeEncodeError: 'ascii' кодек не может кодировать символ u '\ xb1' в позиции 5 : порядковый номер не в диапазоне (128) '. Это из-за того, что я явно не превращаю свои значения в строки unicode? – Matt

+0

@Matt: _Printing_ unicode strings - это еще одна проблема поверх их создания. (Особенно, если вы находитесь в Windows.) Проблема заключается в том, что вы создали допустимую строку Unicode, и Python пытается соответствующим образом закодировать ее для вашей консоли, но не может понять, какой набор символов вам нужен, поэтому он возвращается к «ascii». И для символа '±' нет символа ASCII. Вероятно, вы должны принять этот ответ и создать новый вопрос (или, лучше, искать похожие вопросы, потому что здесь, конечно, много дубликатов). – abarnert

+0

@Matt: Во-первых, чтобы убедиться, что все, кроме работы с печатью, может попробовать (а) запустить скрипт в IDLE (который должен иметь возможность обрабатывать выход Unicode) и/или (b) явно кодировать UTF-8 и записать результат в файл (или с помощью 'io.open' или' codecs.open', чтобы создать файл UTF-8 и записать в него 'unicode') и проверить, что файл выглядит правильно, если смотреть как текстовый файл UTF-8. – abarnert

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