String in Variablen zerlegen?

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
WDZaphod
User
Beiträge: 4
Registriert: Montag 31. Oktober 2005, 17:00
Wohnort: Darmstadt

Hallo Forum!
Bin Newbie, und habe ein Problemchen...
(JAAAA, ich hab die Suchen-Funktion verwedet :D )

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? :roll:

Grüße & vielen Dank!

P.S.:
Ich bin wirlich neu in der Materie Python, daher bitte Idiotensicher erklären :D :lol: :D
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 :roll:
Benutzeravatar
SigMA
User
Beiträge: 181
Registriert: Sonntag 4. April 2004, 13:27
Wohnort: Freiburg
Kontaktdaten:

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!

Code: Alles auswählen

import re
SigMA
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Ist doch bei http://www.python-forum.de/viewtopic.php?t=4366 alles geklärt, oder nicht?

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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. 8)
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast

Code: Alles auswählen

newText = deinText.split()
for i in range(len(newText):
      print newText.replace(":", " = ")
Edit (Leonidas): Code in Python-Tags gesetzt.
Benutzeravatar
lutz.horn
User
Beiträge: 205
Registriert: Dienstag 8. November 2005, 12:57
Wohnort: Pforzheim

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)
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

exec... Böse, böse... :lol:

ich würde es lieber einfach in ein Dict packen und damit weiter arbeiten!

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

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). :twisted:

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()])
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Gast

jens hat geschrieben:exec... Böse, böse... :lol:

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
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Anonymous hat geschrieben:
jens hat geschrieben:exec... Böse, böse... :lol:

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'
TUFKAB – the user formerly known as blackbird
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.
Benutzeravatar
jens
Python-Forum Veteran
Beiträge: 8502
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

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 ;)

GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Antworten