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
String in Variablen zerlegen?
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
Seriell ist ja eine Art Netzwerk, wobei die Frage selbst nix damit zu tun hat...
SORRY!
Brauch aber trotzdem Hilfe
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
Code: Alles auswählen
import re
Leichtdio.de - Das Kreativ-Blog
http://www.leichtdio.de
http://www.leichtdio.de
- 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?
-
- Python-Forum Veteran
- Beiträge: 16025
- Registriert: Freitag 20. Juni 2003, 16:30
- Kontaktdaten:
Klick - und verschoben.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!
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Code: Alles auswählen
newText = deinText.split()
for i in range(len(newText):
print newText.replace(":", " = ")
Hallo,
Probiers mal so: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.
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)
-
- 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).
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
Der Zugriff auf die gewünschten Variablen ist dann natürlich etwas unbequemer.jens hat geschrieben:exec... Böse, böse...
ich würde es lieber einfach in ein Dict packen und damit weiter arbeiten!
Code: Alles auswählen
>>> theDict["T1"] # unbequem, aber sicher
20
>>> T1 # bequem, aber durch exec gewonnen
20
-
- User
- Beiträge: 1790
- Registriert: Donnerstag 28. Oktober 2004, 16:33
- Wohnort: Graz, Steiermark - Österreich
- Kontaktdaten:
warum nicht so?Anonymous hat geschrieben:Der Zugriff auf die gewünschten Variablen ist dann natürlich etwas unbequemer.jens hat geschrieben:exec... Böse, böse...
ich würde es lieber einfach in ein Dict packen und damit weiter arbeiten!
Code: Alles auswählen
>>> theDict["T1"] # unbequem, aber sicher 20 >>> T1 # bequem, aber durch exec gewonnen 20
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
Das birgt immer noch die Gefahr, dass von aussen Namen reinkommen die im Programm oder in der Funktion benutzte Namen überschreiben.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'
- jens
- Python-Forum Veteran
- Beiträge: 8502
- Registriert: Dienstag 10. August 2004, 09:40
- Wohnort: duisburg
- Kontaktdaten:
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!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
Beim Dict kannst du einfach die Keys kontrollieren