2010-07-27 16 views
1

J'ai une chaîne après impression est comme ceci: \x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71Je veux une barre oblique inverse - pas deux

Mais je veux changer cette chaîne à "\x4d\xff\xfd\x00\x02\x8f\x0e\x80\x66\x48\x71" qui n'est pas imprimable (il est nécessaire d'écrire au port série). Je sais que c'est un problème avec '\'. comment puis-je remplacer ces barres obliques inversibles imprimables à non imprimable?

+2

Voulez-vous dire, vous voulez convertir une chaîne ' '\\ X4D \\ x4e'' dans'' \ x4d \ x4e'' (par exemple ' 'MN'')? – kennytm

Répondre

5

Si vous voulez décoder votre chaîne, utilisez decode() avec 'string_escape' comme paramètre qui interprétera les littéraux de votre variable comme une chaîne littérale python (comme si elle était tapée comme une chaîne constante dans votre code).

mystr.decode('string_escape') 
+0

C'était m'aider. Mon problème est résolu. Merci beaucoup ;) – CarolusPl

1

Vous confondez la représentation imprimable d'une chaîne littérale avec la chaîne elle-même:

>>> 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! C'est la solution de mon problème – CarolusPl

+0

Aucune idée, peut-être parce que j'ai inclus un lien? Nous étions tous dans une minute environ ;-) (honnêtement: j'ai trouvé d'autres plus clairs que le mien, et la qualité, pas la vitesse, devrait justifier une réponse vérifiée). – Abel

2

Utilisation 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 

Cette dernière poubelle est ce que mes impressions Python en essayant de imprimez votre chaîne non imprimable.