IP-Adresse/Netzwerk Analyse von text-Datei mit python
Habe ich den untenstehenden text-Datei, die ich bräuchte etwas Hilfe bei Analyse der IP-Adressen.
Die text-Datei ist von der form
abc 10.1.1.1/32 aabbcc
def 11.2.0.0/16 eeffgg
efg 0.0.0.0/0 ddeeff
In anderen Worten, eine Reihe von IP-Netzwerken existieren, die als Teil einer log-Datei. Die Ausgabe sollte so bereitgestellt werden, wie unten:
10.1.1.1/32
11.2.0.0/16
0.0.0.0/0
Habe ich den code unten, aber nicht zur Ausgabe der gewünschten Informationen
file = open(filename, 'r')
for eachline in file.readlines():
ip_regex = re.findall(r'(?:\d{1,3}\.){3}\d{1,3}', eachline)
print ip_regex
- Versuchen Sie, zu beschreiben, was nicht jede Zeile code, und Sie werden den Fehler zu finden. siehe re-Dokumentation zu.
- Gut, Sie enthält nicht alles, was in Ihrem regulären Ausdruck für die
/32
oder ähnliches am Ende, so natürlich es geht nur um die übereinstimmung der10.1.1.1
oder ähnliches. re.findall("\d+\.\d+\.\d+\.\d+\/\d+",file.read())
, sollten Sie auchwith
zum öffnen Ihrer Dateien- Als seitliche Anmerkung, es gibt keinen Grund zu verwenden
readlines()
es.file
bereits in einem wiederholenden Linien. Alles, was Sie tun, ist verschwenderisch zwingt Python zu Lesen und zu analysieren, die gesamte Datei in den Speicher, bevor Sie es verwenden können. - Als weitere Randbemerkung, das sind keine IP-Adressen, die sind IP-Netzwerke, die eine Adresse enthalten, und eine Bitmaske. In der Tat, den existierenden code bereits suchen der IP-Adressen, die Teil dieser Netzwerke...
- du hast Recht...ein bisschen schlampig mit der IP-Terminologie in der Frage...sollten Sie IP-Netzwerke
Du musst angemeldet sein, um einen Kommentar abzugeben.
Ersten, dein regex nicht einmal den Versuch, zu erfassen, nichts, aber die vier gepunkteten zahlen, so ist es natürlich nicht gehen mit etwas anderes, wie eine
/32
am Ende. wenn Sie nur hinzufügen, z.B./\d{1,2}
zu Ende, werde es beheben:Debuggex Demo
Jedoch, wenn Sie nicht verstehen, reguläre Ausdrücke gut genug, um zu verstehen, dass Sie wahrscheinlich sollte nicht sein mit einem regex als ein Stück der "Magie", dass Sie nie in der Lage sein, zu Debuggen oder zu erweitern. Es ist ein wenig Ausführlicher mit
str
Methoden wiesplit
oderfind
, aber vielleicht einfacher zu verstehen für einen Anfänger:As a side note, je nachdem, was Sie eigentlich tun mit diesen Sachen, möchten Sie vielleicht die Verwendung der
IP-Adresse
- Modul (oder die Rückportierung auf PyPI für 2.6-3.2) anstelle von string-parsing:Können Sie kombinieren, dass mit den oben genannten:
In diesem speziellen Fall ein regex wäre des guten zuviel, Sie könnte verwenden
split
Dies sollte eine Liste von strings, die die ip-Adressen.