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:
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.