2010-07-27 7 views
1

У меня есть строка, которая после печати, как это: \x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71Я хочу, чтобы один символ - не два

Но я хочу изменить эту строку "\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71", которая не для печати (необходимо написать к последовательному порту). Я знаю, что это проблема с '\'. как я могу заменить эти обратные косы печати на непечатные?

+2

ли вы имеете в виду, вы хотите, чтобы преобразовать строку ' '\\ X4D \\ x4e'' в'' \ X4D \ x4e'' (т.е. ' 'MN'')? – kennytm

ответ

5

Если вы хотите декодировать свою строку, используйте decode() с параметром 'string_escape' в качестве параметра, который будет интерпретировать литералы в вашей переменной как литеральную строку python (как если бы он был введен как постоянная строка в вашем коде).

mystr.decode('string_escape') 
+0

Это помогло мне. Моя проблема решена. Большое спасибо ;) – CarolusPl

1

Вы путаете печати представления строки буквального с самой строкой:

>>> c = '\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71' 
>>> c 
'M\xff\xfd\x00\x02\x8f\x0e\x80fHq' 
>>> len(c) 
11 
>>> len('\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71') 
11 
>>> len(r'\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71') 
44 
1
your_string.decode('string_escape') 
+0

Thx! Это решение моей проблемы – CarolusPl

+0

Не знаю, может быть, потому, что я включил ссылку? Мы все были в течение минуты или около того ;-) (честно: я нашел других более ясных, чем у меня, и качество, а не скорость, должно гарантировать проверенный ответ). – Abel

2

Использованием decode():

>>> st = r'\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71' 
>>> print st 
\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71 
>>> print st.decode('string-escape') 
MÿýfHq 

Это последний мусором является то, что мой Python печатает при попытке напечатайте свою непечатаемую строку.

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