String zu Array aufspalten

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
ihPyP
User
Beiträge: 58
Registriert: Samstag 4. September 2010, 23:06

Hallo,

ich möchte eine kurze Frage hier stellen, denn ich habe selbst noch keine Lösung. Mein Ziel ist einen String (value) in ein Feld von Zeichenketten aufzuteilen. Als Trennzeichen suche ich nach einem Komma:

Code: Alles auswählen

value = ' "Argument", "1, 2, 3, 4", "Sache", 12345 ' 
tempData = list()
tempData = value.split(",")
Das ist im Prinzip kein Problem, aber das Suchkriterium würde das zweite Argument "1, 2, 3, 4" in vier einzelne Strings spalten. Das möchte ich aber gerne vermeiden. Wie schaffe ich es also, dass in tempData letztlich folgende Einträge ankommen ['Argument', '1, 2, 3, 4', 'Sache', '12345']???

Danke für die Hilfe im Voraus.
Sirius3
User
Beiträge: 17711
Registriert: Sonntag 21. Oktober 2012, 17:20

@ihPyP: tempData ist ein sehr schlechter Name. Versuche besser zu beschreiben, was in der Variable steht. Was denkst Du, bewirkt die zweite Zeile? Woher kommt eigentlich der String?

Code: Alles auswählen

four_values = ast.literal_eval(value.strip())
ihPyP
User
Beiträge: 58
Registriert: Samstag 4. September 2010, 23:06

Hallo,

"tempData" ist ein Zwischenspeicher bzw. eine Liste, die ich nur zum Aufteilen der Daten verwende.

Die Daten kommen aus einer Steuerdatei und werden vom Benutzer gesetzt. Dies soll möglichst einfach und ohne besondere Maskierungszeichen "\" erfolgen. Also "1, 2, 3, 4" anstelle von "1\, 2\, 3\, 4".

Ich schicke die Eingabe dann wieder in eine andere Datei / Macoro. Ich muss mich somit also an den Syntax dieser Macrosprache halten und kann die Eingaberegeln nicht ändern. Was ich bezwecke ist:
a) Das Komma soll als Trennzeichen dienen, um den gesamten String in mehre Teile aufzuspalten
b) Das Trennzeichen "," soll aber nicht innerhalb von zwei Anführungszeichen gewertet werden.
BlackJack

@ihPyP: Vielleicht hilft ja das hier:

Code: Alles auswählen

In [8]: import shlex

In [9]: shlex.split(' "Argument", "1, 2, 3, 4", "Sache", 12345 ')
Out[9]: ['Argument,', '1, 2, 3, 4,', 'Sache,', '12345']
Antworten