Seite 1 von 1
String in Variablen zerlegen?
Verfasst: Montag 31. Oktober 2005, 17:09
von WDZaphod
Hallo Forum!
Bin Newbie, und habe ein Problemchen...
(JAAAA, ich hab die Suchen-Funktion verwedet

)
Ich bekomme über die Serielle Schnittstelle via pyserial einen String, der folgendermaßen aussieht:
T1:20 T2:23 A1:0 A2:30 A3:85 A4:53 K1:0 K2:0
Nun hätte ich gerne, daß der Wert hinter dem ":" in einer Variable mit dem Namen vor dem ":" erscheint. Der String soll also so verwurstet werden:
T1 = 20
T2 = 23 usw.
Irgendwelche Ideen, wie ich das machen könnte?
Grüße & vielen Dank!
P.S.:
Ich bin wirlich neu in der Materie Python, daher bitte Idiotensicher erklären

Verfasst: Montag 31. Oktober 2005, 17:16
von Gast
Hmmm, ob das die falsche Rubrik war?
Seriell ist ja eine Art Netzwerk, wobei die Frage selbst nix damit zu tun hat...
SORRY!
Brauch aber trotzdem Hilfe

Verfasst: Mittwoch 2. November 2005, 13:22
von SigMA
Vielleicht helfen dir die Regulären Ausdrüke weiter! Erstmal damit bei " " trennen und dann immer bei ":" ist aber ne ganz schöne fummels arbeit!
SigMA
Verfasst: Mittwoch 2. November 2005, 13:54
von jens
Verfasst: Mittwoch 2. November 2005, 17:45
von Leonidas
Anonymous hat geschrieben:Hmmm, ob das die falsche Rubrik war?
Seriell ist ja eine Art Netzwerk, wobei die Frage selbst nix damit zu tun hat...
SORRY!
Klick - und verschoben.

Verfasst: Mittwoch 2. November 2005, 20:41
von Gast
Code: Alles auswählen
newText = deinText.split()
for i in range(len(newText):
print newText.replace(":", " = ")
Edit (Leonidas): Code in Python-Tags gesetzt.
Re: String in Variablen zerlegen?
Verfasst: Dienstag 8. November 2005, 13:13
von lutz.horn
Hallo,
WDZaphod hat geschrieben:
T1:20 T2:23 A1:0 A2:30 A3:85 A4:53 K1:0 K2:0
Nun hätte ich gerne, daß der Wert hinter dem ":" in einer Variable mit dem Namen vor dem ":" erscheint. Der String soll also so verwurstet werden:
T1 = 20
T2 = 23 usw.
Probiers mal so:
Code: Alles auswählen
>>> s = 'T1:20 T2:23 A1:0 A2:30 A3:85 A4:53 K1:0 K2:0'
>>> for i in s.split():
... exec "%s = int(%s)" % tuple(i.split(":"))
...
>>> T1, T2, A1, A2, A3, A4, K1, K2
(20, 23, 0, 30, 85, 53, 0, 0)
Verfasst: Dienstag 8. November 2005, 14:12
von jens
exec... Böse, böse...
ich würde es lieber einfach in ein Dict packen und damit weiter arbeiten!
Verfasst: Dienstag 8. November 2005, 17:09
von Leonidas
Ich wollte gerade einen einzeiligen Lösungsansatz posten, aber habe noch zur rechten Zeit
BlackJacks Lösung gesehen: ich bin unabhängig davon auf genau den selben Lösungsansatz gekommen (das ging so weit, dass ich so wie BlackJack IPython verwendet habe).
Code: Alles auswählen
# BlackJacks Lösung
dict(entry.split(':') for entry in s.split())
# und nochmal, für Python-Versionen von 2.4
dict([entry.split(':') for entry in s.split()])
Verfasst: Dienstag 8. November 2005, 20:42
von Gast
jens hat geschrieben:exec... Böse, böse...
ich würde es lieber einfach in ein Dict packen und damit weiter arbeiten!
Der Zugriff auf die gewünschten Variablen ist dann natürlich etwas unbequemer.
Code: Alles auswählen
>>> theDict["T1"] # unbequem, aber sicher
20
>>> T1 # bequem, aber durch exec gewonnen
20
Verfasst: Dienstag 8. November 2005, 20:47
von mitsuhiko
Anonymous hat geschrieben:jens hat geschrieben:exec... Böse, böse...
ich würde es lieber einfach in ein Dict packen und damit weiter arbeiten!
Der Zugriff auf die gewünschten Variablen ist dann natürlich etwas unbequemer.
Code: Alles auswählen
>>> theDict["T1"] # unbequem, aber sicher
20
>>> T1 # bequem, aber durch exec gewonnen
20
warum nicht so?
Code: Alles auswählen
>>> s = 'T1:20 T2:23 A1:0 A2:30 A3:85 A4:53 K1:0 K2:0'
>>> for pair in s.split():
... pair = pair.split(':')
... locals()[pair[0]] = pair[1]
...
>>> dir()
['A1', 'A2', 'A3', 'A4', 'K1', 'K2', 'T1', 'T2', '__builtins__', '__doc__', '__name__', 'pair', 's']
>>> A1
'0'
>>> T2
'23'
Verfasst: Dienstag 8. November 2005, 22:48
von BlackJack
blackbird hat geschrieben:warum nicht so?
Code: Alles auswählen
>>> s = 'T1:20 T2:23 A1:0 A2:30 A3:85 A4:53 K1:0 K2:0'
>>> for pair in s.split():
... pair = pair.split(':')
... locals()[pair[0]] = pair[1]
...
>>> dir()
['A1', 'A2', 'A3', 'A4', 'K1', 'K2', 'T1', 'T2', '__builtins__', '__doc__', '__name__', 'pair', 's']
>>> A1
'0'
>>> T2
'23'
Das birgt immer noch die Gefahr, dass von aussen Namen reinkommen die im Programm oder in der Funktion benutzte Namen überschreiben.
Verfasst: Mittwoch 9. November 2005, 07:25
von jens
Anonymous hat geschrieben:Der Zugriff auf die gewünschten Variablen ist dann natürlich etwas unbequemer.
Code: Alles auswählen
>>> theDict["T1"] # unbequem, aber sicher
20
>>> T1 # bequem, aber durch exec gewonnen
20
Ne, also unbequem ist beides nicht! Das Problem ist aber auch, wenn du mit lokalen Varablen arbeitest kannst du schlecht feststellen, ob die Daten richtig angekommen sind!
Beim Dict kannst du einfach die Keys kontrollieren
