text parsen in python

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.
barton4
User
Beiträge: 2
Registriert: Samstag 22. Oktober 2005, 19:43

text parsen in python

Beitragvon barton4 » Samstag 22. Oktober 2005, 19:53

Ich will in python dateien einlesen die ungefähr so mit den inhalt ausehen:
wert=value wert=value blbla wert=value foo bar usw..


gibt es da besondere funktionen die ein das erleichtern.
Hab bis jetzt immer mit nervig langen if konstruktionen gearbeitet die am ende nicht wirklich hingehauen haben :?
BlackJack

Beitragvon BlackJack » Samstag 22. Oktober 2005, 21:03

Also 'wert=value' Paare mit unwichtigem Text dazwischen? Wie sehen denn `wert` und `value` aus? Wenn in keinem von beiden Leerzeichen vorkommen können dann würde ich einen regulären Ausdruck benutzen um die Zuweisungen aus dem Text zu fischen.

Code: Alles auswählen

import re

def iter_assignements(text):
    return ((match.group(1), match.group(2))
            for match in re.finditer(r'([^\s=]+)=([^\s]+)', text))

text = 'spam=23 blabla eggs=4711 dudeldidum answer=42 usw.'
print list(iter_assignements(text))


Ausgabe:

Code: Alles auswählen

[('spam', '23'), ('eggs', '4711'), ('answer', '42')]
barton4
User
Beiträge: 2
Registriert: Samstag 22. Oktober 2005, 19:43

Beitragvon barton4 » Montag 24. Oktober 2005, 16:02

ich moechte zb die datei ip_conntrack datei von linux auswerten und diese werte dann in ein dictionary bringen.
BlackJack

Beitragvon BlackJack » Montag 24. Oktober 2005, 23:21

Ich kenne mich mit `iptables` nicht aus, aber ich habe im Netz eine Beispielzeile aus der `ip_conntrack` gefunden. Falls die wirklich so aussehen, dann wird das mit dem dict nicht so einfach:

Code: Alles auswählen

import re

def iter_assignements(text):
    return ((match.group(1), match.group(2))
            for match in re.finditer(r'([^\s=]+)=([^\s]+)', text))

text = ('tcp      6 117 SYN_SENT src=192.168.1.6 dst=192.168.1.9 sport=32775 '
        'dport=22 [UNREPLIED] src=192.168.1.9 dst=192.168.1.6 sport=22 '
        'dport=32775 use=2')
print list(iter_assignements(text))


Ausgabe:

Code: Alles auswählen

[('src', '192.168.1.6'), ('dst', '192.168.1.9'), ('sport', '32775'),
('dport', '22'), ('src', '192.168.1.9'), ('dst', '192.168.1.6'), ('sport', '22'),
('dport', '32775'), ('use', '2')]


Die Namen 'src', 'dst' usw. kommen mehrfach mit unterschiedlichen Werten vor.

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder