Seite 1 von 1

Daten von Variablen Trennen

Verfasst: Dienstag 25. Dezember 2007, 00:05
von BasterTWO
Hallo Pythonfreunde,
ich möchte gerne ein Ausgabe von Telnet verarbeiten. Die Daten sind im Forum BEZEICHNUNG=DATA nun würde ich gerne nur noch die Daten haben um sie einer Variablen zuorden zu können. Ich habe es schon mit mehreren split Versuchen porbiert leider bin ich gescheitet. Aber vieleicht findet ihr eine gute und elegante Lösung.
server_id=1
server_name=TestServer
server_platform=Linux
server_welcomemessage=Welcome to TS
server_webpost_linkurl=
server_webpost_posturl=
server_password=0
server_clan_server=1
server_udpport=8700
server_maxusers=50
server_allow_codec_celp51=0
server_allow_codec_celp63=0
server_allow_codec_gsm148=0
server_allow_codec_gsm164=0
server_allow_codec_windowscelp52=0
server_allow_codec_speex2150=0
server_allow_codec_speex3950=0
server_allow_codec_speex5950=0
server_allow_codec_speex8000=0
server_allow_codec_speex11000=0
server_allow_codec_speex15000=0
server_allow_codec_speex18200=0
server_allow_codec_speex24600=-1
server_packetssend=115713
server_bytessend=20029930
server_packetsreceived=117213
server_bytesreceived=19786883
server_uptime=120285
server_currentusers=1
server_currentchannels=28
server_bwinlastsec=20
server_bwoutlastsec=22
server_bwinlastmin=78
server_bwoutlastmin=24
OK
Viele Grüße
BasterTWO

Verfasst: Dienstag 25. Dezember 2007, 00:10
von Leonidas
Angenommen die ganzen Variablenzuweisungen sind im String ``s`` gespeichert:

Code: Alles auswählen

dict(e.split('=') for e in s.splitlines())

Verfasst: Dienstag 25. Dezember 2007, 00:13
von meneliel
Hallo,

wie möchtest du sie denn specihern? In einer Liste?
Die Ausgabe von Telnet hast du in welcher Form vorliegen? IN einer Textdatei?

mit s.split("=")[1] müsstest du immer an den Datenteil kommen.

Verfasst: Dienstag 25. Dezember 2007, 18:24
von windner
Das ist wieder einmal eine klassische Tokenizing-Disziplin. Ich frage mich, ob es da nicht fertige Tokenizer gibt, die uns solche Arbeit abnehmen (als Python-Module; ich meine nicht yacc udgl).

Das würde eine syntaktische Abstraktion von der Quellsprache ergeben. Und mir persönlich würde es die wahnsinnige Idee austreiben, solche Strings durch eval() zu jagen...

Kennt ihr so etwas?

Verfasst: Dienstag 25. Dezember 2007, 19:18
von BlackJack
Was spricht hier gegen `split()`? Ansonsten kann man sicher auch etwas Einfaches mit `pyparsing` basteln.

Verfasst: Dienstag 25. Dezember 2007, 20:36
von Leonidas
BlackJack hat geschrieben:Was spricht hier gegen `split()`?
Das frage ich mich auch die ganze Zeit. Die Lösung mit den Dicts scheint mir ziemlich sinnvoll zu sein, weil die Werte konstant sind und keine anderen Werte referenzieren können, somit wäre ein Parser zwar Möglich aber schlicht overkill und um Größenordnungen langsamer (der aktuelle Code nutzt Dinge die in C implementiert sind und ist dadurch für Python-Verhältnisse recht performant).