Hi!
Ich komme gerade einfach nicht drauf wie ich einen String, den ich als repr(string) gespeichert habe, wieder interpretiert, also die Steuerzeichen ('\n' etc) umgesetzt bekomme.
Hat jemand n Tipp für mich?
Schönen Gruß
KoenigGunther
Umwandlung repr() -> String
Hmpf, ich glaube du verstehst da etwas falsch... Diese "Steuerzeichen" werden erst bei der Ausgabe beachtet, vorher sind's ganz normale Zeichen. Repr brauchst du übrigens nie aufzurufen, str ist eindeutiger.KoenigGunther hat geschrieben:Hi!
Ich komme gerade einfach nicht drauf wie ich einen String, den ich als repr(string) gespeichert habe, wieder interpretiert, also die Steuerzeichen ('\n' etc) umgesetzt bekomme.
Hat jemand n Tipp für mich?
Schönen Gruß
KoenigGunther
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
Code: Alles auswählen
>>> def unquote_string(s):
... assert s and s[0] == s[-1] and s[0] in '"\''
... return s[1:-1].decode('string-escape')
...
>>> unquote_string(r'"\nfoo"')
'\nfoo'
TUFKAB – the user formerly known as blackbird
-
- User
- Beiträge: 22
- Registriert: Donnerstag 19. April 2007, 10:05
Wie müsste ich denn die "\" ersetzen?
Angenommen ich habe
Dass beim ersten Mal ein Fehler geworfen werden muss ist mir klar, aber dass das zweite dann nicht gefunden wird verstehe ich noch nicht so wirklich.
Angenommen ich habe
Code: Alles auswählen
>>> s = "\n"
>>> s
'\n'
>>> "\" in s
File "<stdin>", line 1
"\" in s
^
SyntaxError: EOL while scanning single-quoted string
>>> "\\" in s
False
>>>
`s` enthält *ein* Zeichen, nämlich das Zeilenende-Zeichen mit dem Bytewert 10. Da ist kein Backslash drin. Die beiden Zeichen r'\n' sind ja nur eine Ersatzdarstellung für dieses eine Zeichen in der `repr()`-Form der Zeichenkette, damit man das Zeichen überhaupt sehen kann.
Code: Alles auswählen
In [7]: s = '\n'
In [8]: s
Out[8]: '\n'
In [9]: len(s)
Out[9]: 1
In [10]: ord(s)
Out[10]: 10
-
- User
- Beiträge: 22
- Registriert: Donnerstag 19. April 2007, 10:05
Hm... Ich schreibe beispielsweise den String
in eine Datei. Da darf das "\n" aber nicht interpretiert werden, weswegen ich da ein "\\n" draus machen möchte. Da ich ein bestehendes Programm erweitere ist es mir nicht möglich den String als raw zu deklarieren (never change a running system), sondern muss irgendwie den "\" verdoppeln. Natürlich dann bei allen Steuerzeichen wie "\n", "\t", etc...
Code: Alles auswählen
s = "hallo\nhallo2"
Das hat mitsuhiko schon fast gezeigt. Es gibt 'string-escape' natürlich auch in die andere Richtung:
Code: Alles auswählen
In [106]: s.encode('string-escape')
Out[106]: 'hallo\\nhallo2'
-
- User
- Beiträge: 22
- Registriert: Donnerstag 19. April 2007, 10:05
Hm, Mist, das hab ich irgendwie übersehen
Danke sehr!
Danke sehr!