Seite 1 von 1

String -> Rawstring

Verfasst: Mittwoch 30. Juli 2008, 14:51
von Crazed
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.

Verfasst: Mittwoch 30. Juli 2008, 14:54
von Leonidas
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.

Verfasst: Mittwoch 30. Juli 2008, 14:56
von Crazed
Das heißt es besteht absolut keine Möglichkeit einen String den man als Normalen Text hat in einen escapten raw string umzuwandeln?

Verfasst: Mittwoch 30. Juli 2008, 15:03
von meneliel
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']

Verfasst: Mittwoch 30. Juli 2008, 15:13
von Crazed
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..

Verfasst: Mittwoch 30. Juli 2008, 15:35
von Mephisto
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

Verfasst: Mittwoch 30. Juli 2008, 15:42
von Crazed
Viele Dank :)!