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
text parsen in python
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.
Ausgabe:
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))
Code: Alles auswählen
[('spam', '23'), ('eggs', '4711'), ('answer', '42')]
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:
Ausgabe:
Die Namen 'src', 'dst' usw. kommen mehrfach mit unterschiedlichen Werten vor.
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))
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')]