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

String in Variablen zerlegen?

Beitragvon WDZaphod » Montag 31. Oktober 2005, 17:09

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

Beitragvon Gast » Montag 31. Oktober 2005, 17:16

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:

Beitragvon SigMA » Mittwoch 2. November 2005, 13:22

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 2. November 2005, 13:54

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Mittwoch 2. November 2005, 17:45

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 Modvoice
Gast

Beitragvon Gast » Mittwoch 2. November 2005, 20:41

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

Re: String in Variablen zerlegen?

Beitragvon lutz.horn » Dienstag 8. November 2005, 13:13

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Dienstag 8. November 2005, 14:12

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

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 8. November 2005, 17:09

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 Modvoice
Gast

Beitragvon Gast » Dienstag 8. November 2005, 20:42

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

Beitragvon mitsuhiko » Dienstag 8. November 2005, 20:47

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

Beitragvon BlackJack » Dienstag 8. November 2005, 22:48

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
Moderator
Beiträge: 8458
Registriert: Dienstag 10. August 2004, 09:40
Wohnort: duisburg
Kontaktdaten:

Beitragvon jens » Mittwoch 9. November 2005, 07:25

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

CMS in Python: http://www.pylucid.org
GitHub | Open HUB | Xing | Linked in
Bitcoins to: 1JEgSQepxGjdprNedC9tXQWLpS424AL8cd

Wer ist online?

Mitglieder in diesem Forum: noisefloor