Seite 1 von 1

text parsen in python

Verfasst: Samstag 22. Oktober 2005, 19:53
von barton4
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 :?

Verfasst: Samstag 22. Oktober 2005, 21:03
von BlackJack
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')]

Verfasst: Montag 24. Oktober 2005, 16:02
von barton4
ich moechte zb die datei ip_conntrack datei von linux auswerten und diese werte dann in ein dictionary bringen.

Verfasst: Montag 24. Oktober 2005, 23:21
von BlackJack
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.