Я хочу одну обратную косую черту - не две - PullRequest
1 голос
/ 27 июля 2010

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

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

Ответы [ 4 ]

5 голосов
/ 27 июля 2010

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

mystr.decode('string_escape')
2 голосов
/ 27 июля 2010

Использование 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 при попытке напечатать непечатную строку.

1 голос
/ 27 июля 2010
your_string.decode('string_escape')
1 голос
/ 27 июля 2010

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

>>> 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
...