2016-03-23 5 views
0

ich meinen String kodieren wollen bekommen:Python: kodieren String-Flucht mit den richtigen Zitate

x="print 'Hello.\nI\'m a robot from district 09'" 
x=x.encode('string-escape') 
print x 

# Result: print \'Hello.\nI\'m a robot from district 09\' 

Aber das ist nicht das Ergebnis ich erwarte. Ich möchte etwas wie:

# Result: print 'Hello.\nI\'m a robot from district 09' 

Wie bekomme ich dieses Ergebnis? so, wenn ich es ausführen 'exec x' mit i wird diese:

exec x 
# Result: 
Hello. 
I'm a robot from district 09 

Antwort

0

Verwenden repr

x="print 'Hello.\nI\'m a robot from district 09'" 
print repr(x) 

# Result: 'Hello.\nI\'m a robot from district 09' 

EDIT: Wie im Kommentar diese Methode erwähnt verpasst die 'in der I' m Das Drucken von rohen Strings kann einfach mit 'r' erreicht werden. Siehe das Beispiel unten. Ich habe diese Zeit das Ergebnis selbst bestätigt.

x= r"print 'Hello, \nI\'m a robot from district 09'" 
print x 

#result: print 'Hello, \nI\'m a robot from district 09' 

EDIT2: Sie können nicht eine vorhandene Zeichenfolge "raw" drehen. Das Präfix r in Literalen wird vom Parser verstanden; Es wird angewiesen, Escape-Sequenzen in der Zeichenfolge zu ignorieren. Sobald jedoch ein String-Literal analysiert wurde, gibt es keinen Unterschied zwischen einer rohen und einer regulären Zeichenfolge. Wenn Sie beispielsweise eine Zeichenfolge haben, die einen Zeilenumbruch enthält, können Sie zur Laufzeit nicht feststellen, ob diese Zeilenumbruch aus der Escape-Sequenz \ n oder aus einer Zeichenfolge wie "\ next" stammt. Das tatsächliche Zeichenfolgenobjekt, das aus einer dieser Methoden erstellt wurde, sieht gleich aus.

Also alle Versuche, String-encode/string-escape und repr zu verwenden, werden für die von Ihnen erwartete Verwendung fehlschlagen.

Hoffe, das hilft.

+0

Danke, aber immer noch falsch Ergebnis: "print 'Hallo. \ NIch bin ein Roboter aus dem Bezirk 09'". Das "\ '" in -i'm- fehlt. – andio

+0

@andio Bitte beachten Sie die Änderung. Danke für den Hinweis auf den Fehler! –

+0

Hi, ja das habe ich auch probiert. das 'r' funktioniert nur, wenn ich das x selbst setzen kann. Aber wenn das x eine Variable ist, die von einem anderen Benutzer eingegeben wird (über die Texteingabeschnittstelle). Wie kann man dann das 'r' in diese Variable einbetten? Das Ziel ist also: Benutzer geben den Befehl in der Texteingabe ein. Dann stelle ich Knopf zur Verfügung, den ich "exec" Befehl verwenden kann, um es auszuführen. – andio

Verwandte Themen