2014-07-22 13 views
8

Wenn ich eine Zeichenfolge mit Zeichen habe (0x610x620xD), die repr Funktion dieser Zeichenfolge wird 'ab\r' zurückgeben.Umgekehrte Rep-Funktion in Python

Gibt es Weise Rückwärtsbetrieb zu tun: Wenn ich Zeichenfolge haben 'ab\r' (mit Zeichen 0x610x620x5C0x72), ich brauche String 0x610x620xD zu erhalten.

+0

Sie können [ 'hex'] (https://docs.python.org/2/library/functions.html#hex) und ['ord'] (https://docs.python.org/2/library/functions.html#ord), aber' '\ r'' besteht nicht aus zwei Zeichen. Und ''\ r' 'ist [' 0xd'] (http://www.fileformat.info/info/unicode/char/d/index.htm), nicht ['0x13'] (http: // www. Dateiformat.info/info/unicode/char/13/index.htm). – jonrsharpe

+0

Ich benutze repr (das konvertiert \ r in zwei Zeichen), weil ich alle Sonderzeichen sehen muss, und ich brauche Funktion, die umgekehrt zum repr sind, weil ich die Sonderzeichen in forman \ ch eingeben muss. Ja, 0xD natürlich, Entschuldigung für Fehler – user3479125

+0

es ist nicht zwei Zeichen, wenn ich str = "ab \ r" schreibe, aber wenn ich es von meiner GUI - Schnittstelle – user3479125

Antwort

16

Ich denke, was Sie suchen ist ast.literal_eval:

>>> s = repr("ab\r") 
>>> s 
"'ab\\r'" 
>>> from ast import literal_eval 
>>> literal_eval(s) 
'ab\r' 
+0

Ihr Code funktioniert, aber nicht in meiner Situation ((I müssen smth nächste: >>> s = "ab \\ r" >>> s 'ab \\ r' >>> print (n) ab \ r >>> literal_eval (n) Traceback (letzter Anruf zuletzt): File "", Zeile 1, in Datei "C: \ Python27 \ lib \ ast.py", Zeile 49, in literal_eval node_or_string = parst (node_or_string, mode = "eval ') Datei "C: \ Python27 \ lib \ ast.py", Zeile 37, i n analysieren return Kompilierung (Quelle, Dateiname, Modus, PyCF_ONLY_AST) File "", Zeile 1 ab \ r ^ Syntaxerror: unerwartetes Zeichen nach Zeilenfortsetzungszeichen – user3479125

+1

@ user3479125 Sie haben nicht genug Zitate - Beachten Sie, dass Es gibt zwei Paare (ein einzelnes, ein Doppel: '" '...' "') in 's' in meinem Beispiel. Andernfalls kann 'literal_eval' es nicht als Zeichenfolge auswerten. – jonrsharpe

+0

Ja, danke !!!, Hinzufügen von Anführungszeichen hat es gelöst! – user3479125

Verwandte Themen