Daten von Variablen Trennen

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
BasterTWO
User
Beiträge: 75
Registriert: Donnerstag 25. Oktober 2007, 20:03

Dienstag 25. Dezember 2007, 00:05

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
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 25. Dezember 2007, 00:10

Angenommen die ganzen Variablenzuweisungen sind im String ``s`` gespeichert:

Code: Alles auswählen

dict(e.split('=') for e in s.splitlines())
My god, it's full of CARs! | Leonidasvoice vs Modvoice
meneliel
User
Beiträge: 256
Registriert: Montag 25. Juni 2007, 08:35
Kontaktdaten:

Dienstag 25. Dezember 2007, 00:13

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.
windner
User
Beiträge: 76
Registriert: Freitag 19. Oktober 2007, 11:25

Dienstag 25. Dezember 2007, 18:24

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?
BlackJack

Dienstag 25. Dezember 2007, 19:18

Was spricht hier gegen `split()`? Ansonsten kann man sicher auch etwas Einfaches mit `pyparsing` basteln.
Zuletzt geändert von BlackJack am Mittwoch 26. Dezember 2007, 11:27, insgesamt 1-mal geändert.
Leonidas
Administrator
Beiträge: 16024
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Dienstag 25. Dezember 2007, 20:36

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