String -> Rawstring

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Hallo,

Ich weiß das folgendes geht:

Code: Alles auswählen

In [1]: x = r''' Ä Ö Ü  > <
   ...: 
   ...: '''

In [2]: x
Out[2]: ' \xc3\x84 \xc3\x96 \xc3\x9c  > <\n\n'
Jetzt wurden aber nicht die > < in raw konvertiert.

Code: Alles auswählen

In [1]: u'\x3E\x3C'
Out[1]: u'><'
Wie bekomme ich Python dazu, aus einem String den ich in einer Variable habe alles so zu escapen? Also wirklich für jeden Umlaut und jedes Sonderzeichen sowas zu machen.

Z.b sowas:
ABCDEFGHIJKLMOPQRSTUVWXYZ\nabcdefghijklmopqrstuvwxyz\n\u00e4\u00f6\u00fc\n\n"\u00a7$%&/()=?\'_-\x3E\x3C|\u00e1 \u00b4\u00b4^^

Code: Alles auswählen

In [1]: print u'ABCDEFGHIJKLMOPQRSTUVWXYZ\nabcdefghijklmopqrstuvwxyz\n\u00e4\u00f6\u00fc\n\n"\u00a7$%&/()=?\'_-\x3E\x3C|\u00e1 \u00b4\u00b4^^'
ABCDEFGHIJKLMOPQRSTUVWXYZ
abcdefghijklmopqrstuvwxyz
äöü

"§$%&/()=?'_-><|á ´´^^
Ich möchte einen Text haben und diesen so zu einem einzeiler machen. Mit den escapten Zeichen etc und dann in eine Datei schreiben.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

String und Raw-String sind eigentlich das gleiche, Raw-String bedeutet nur, dass dort die Steuersequenzen wie \n etc. nicht ausgelöst werden und das auch nur bei der eingabe. Nachdem ein Raw-String eingelesen ist, ist er ein ganz normaler String und du kannst nicht einmal faststellen ob es als Raw-String oder als normales String-Literal eingelesen wurde.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Das heißt es besteht absolut keine Möglichkeit einen String den man als Normalen Text hat in einen escapten raw string umzuwandeln?
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Du könntest den String aufteilen (split), immer wenn ein "\n" auftritt.

Code: Alles auswählen

In [15]: s = "ABCDEFGHIJKLMOPQRSTUVWXYZ\nabcdefghijklmopqrstuvwxyz\n\u00e"

In [16]: s
Out[16]: 'ABCDEFGHIJKLMOPQRSTUVWXYZ\nabcdefghijklmopqrstuvwxyz\n\\u00e'
In [18]: s.split("\n")
Out[18]: ['ABCDEFGHIJKLMOPQRSTUVWXYZ', 'abcdefghijklmopqrstuvwxyz', '\\u00e']
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Oder ich mache es so: Ist zwar sehr hässlich, aber immer noch besser als den ganzen String zu splitten:

Code: Alles auswählen

In [7]: text = '''Hallo Welt
   ...: äöü Hallo Welt HHALLLOOO > < '''

In [8]: exec("x = r'%s' % text")

In [9]: x
Out[9]: 'Hallo Welt\n\xc3\xa4\xc3\xb6\xc3\xbc Hallo Welt HHALLLOOO > < '

In [10]: print x
Hallo Welt
äöü Hallo Welt HHALLLOOO > < 
Aber dann wird es trotzdem noch richtig in die Datei geschrieben.. Verdammt..
Mephisto
User
Beiträge: 28
Registriert: Mittwoch 17. Januar 2007, 15:52

Mit exec/eval arbeiten ist nie eine bessere Lösung :)
Ich vermute mal du suchst das hier

Code: Alles auswählen

print "\n".encode('string-escape')
lg mephisto
Crazed
User
Beiträge: 171
Registriert: Sonntag 18. Mai 2008, 11:44

Viele Dank :)!
Antworten