Speziellen String in Liste konvertieren

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.
OnkelHotte
User
Beiträge: 3
Registriert: Freitag 10. Oktober 2008, 20:28

Speziellen String in Liste konvertieren

Beitragvon OnkelHotte » Freitag 10. Oktober 2008, 20:35

EDIT: Die Frage bezog sich darauf, wie man einen String in eine Liste konvertiert. Die scheinbare Problemlösung meinerseits veranlasste mich dazu, meine Frage wieder zu entfernen...
Zuletzt geändert von OnkelHotte am Freitag 10. Oktober 2008, 21:03, insgesamt 1-mal geändert.
BlackJack

Beitragvon BlackJack » Freitag 10. Oktober 2008, 20:41

Code: Alles auswählen

In [200]: s = '[["a1","a2","a3"],["b1","b2","b3"],["c1","c2","c3"]]'

In [201]: [x[1:-1].split('","') for x in s[2:-2].split('],[')]
Out[201]: [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3'], ['c1', 'c2', 'c3']]


Edit: Ich hoffe Du hast jetzt nicht einfach `eval()` genommen.
OnkelHotte
User
Beiträge: 3
Registriert: Freitag 10. Oktober 2008, 20:28

Beitragvon OnkelHotte » Freitag 10. Oktober 2008, 21:09

Danke für deine schnell Antwort.
Ich vergaß im Übrigen zu erwähnen, dass die doppelten Anführungszeichen HTML-formatiert sind. Deine Lösung hat mich schon sehr viel weiter gebracht.
Ich habe sie folgendermaßen verändert:

[x[1:-1].split('","') for x in s[2:-2].split('"],["')]

dadurch erhalte ich immerhin folgendes:

[['quot;a1', 'a2', 'a3'], ['b1', 'b2', 'b3'], ['c1', 'c2', 'c3&quot']]

...etwas merkwürdig wie ich finde.
Beim ersten """ fehlt das erste Zeichen (&), beim letzten das letzte (; )... :shock:
BlackJack

Beitragvon BlackJack » Freitag 10. Oktober 2008, 21:36

Wenn Du das merkwürdig findest, solltest Du das Tutorial aus der Dokumentation durcharbeiten, mit speziellem Augenmerk auf "slicing" bei Zeichenketten.

Ansonsten könnte man auch als ersten Schritt die '"'s durch Anführungszeichen ersetzen:

Code: Alles auswählen

In [208]: [x[1:-1].split('","')
   .....:  for x in s.replace('"', '"')[2:-2].split('],[')]
Out[208]: [['a1', 'a2', 'a3'], ['b1', 'b2', 'b3'], ['c1', 'c2', 'c3']]


Du solltest auf jeden Fall den ganzen Ausdruck mal in einer Python-Shell Schritt für Schritt aufbauen und Dir die ganzen Zwischenergebnisse anschauen.
OnkelHotte
User
Beiträge: 3
Registriert: Freitag 10. Oktober 2008, 20:28

Beitragvon OnkelHotte » Sonntag 12. Oktober 2008, 18:00

Danke!
Du hast mir sehr geholfen!
Python fetzt!
;-)
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Re: Speziellen String in Liste konvertieren

Beitragvon Pekh » Sonntag 12. Oktober 2008, 20:18

OnkelHotte hat geschrieben:EDIT: Die Frage bezog sich darauf, wie man einen String in eine Liste konvertiert. Die scheinbare Problemlösung meinerseits veranlasste mich dazu, meine Frage wieder zu entfernen...


Das ist doof. Ich kann durchaus nachvollziehen, daß man manchmal einen vielleicht nicht ganz so gelungenen Beitrag ungeschehen machen möchte, aber letztlich hilfst du damit niemandem weiter. Bedenke, daß vielleicht auch andere irgendwann mal diese Frage haben könnten und über die Suchfunktion auf deinen Beitrag stoßen würden. Im Moment können sie nicht mehr erkennen, daß es sich mal um "ihre" Frage (konkrete Problemstellung) gehandelt hat und müssen sie erneut stellen. Schön ist anders.
__marcus__
User
Beiträge: 92
Registriert: Mittwoch 10. September 2008, 22:10
Wohnort: Hamburg

Beitragvon __marcus__ » Dienstag 14. Oktober 2008, 00:25

OnkelHotte hat geschrieben:Danke!
Du hast mir sehr geholfen!
Python fetzt!
;-)


Bist Du der ps.de-OnkelHotte?
Benutzeravatar
Hyperion
Moderator
Beiträge: 7471
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

Re: Speziellen String in Liste konvertieren

Beitragvon Hyperion » Dienstag 14. Oktober 2008, 06:56

OnkelHotte hat geschrieben:Die scheinbare Problemlösung meinerseits veranlasste mich dazu, meine Frage wieder zu entfernen...

Scheinbar gefällt mir :-D
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Beitragvon sma » Freitag 17. Oktober 2008, 09:30

Übrigens: Wenn garantiert werden kann, dass in dem String `s` nichts böses steht, reicht bei dem Format doch ein `eval`, um das in eine Python-Liste von Listen mit Strings zu verwandeln.

Wenn man's nicht garantieren kann, aber Python 2.6 hat, kann das Modul `ast` mit `ast.literal_eval()` eine elegante Lösung sein.

Stefan

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder