Seite 1 von 1
Umwandlung repr() -> String
Verfasst: Donnerstag 17. Januar 2008, 11:54
von KoenigGunther
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
Re: Umwandlung repr() -> String
Verfasst: Donnerstag 17. Januar 2008, 11:56
von BlackVivi
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
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.
Verfasst: Donnerstag 17. Januar 2008, 12:40
von mitsuhiko
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'
Verfasst: Freitag 18. Januar 2008, 08:29
von KoenigGunther
Wie müsste ich denn die "\" ersetzen?
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
>>>
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.
Verfasst: Freitag 18. Januar 2008, 09:31
von BlackJack
`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
Verfasst: Samstag 19. Januar 2008, 18:59
von KoenigGunther
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...
Verfasst: Samstag 19. Januar 2008, 19:08
von BlackJack
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'
Verfasst: Sonntag 20. Januar 2008, 10:59
von KoenigGunther
Hm, Mist, das hab ich irgendwie übersehen

Danke sehr!