Prozessdaten mit Listen verwalten
Daten einer Webserver-Logdatei
In einer Webserver-Logdatei werden alle Zugriffe auf Dateien, die zur Darstellung von Webseiten benötigt werden, protokolliert. Wir betrachten im Folgenden die Daten einer solchen Webserver-Logdatei (in etwas vereinfachter Form, da weitere Angaben weggelassen sind):
131.246.0.13 - - [24/Jul/2012:12:44:21 +0200] "GET /informatik/index.html HTTP/1.1" 200 512 131.246.0.13 - - [24/Jul/2012:12:44:25 +0200] "GET /informatik/bild.png HTTP/1.1" 200 805 # ...
In der Tabelle wird die Bedeutung der Daten kurz erläutert.
Daten | Bedeutung |
---|---|
131.246.0.13 | IP-Adresse des aufrufenden Hosts |
- | Benutzernamer, sofern erforderlich |
- | Passwort, falls erforderlich |
[24/Jul/2012:12:44:21 +0200] | Zeitstempel bestehend aus Datum, Uhrzeit und Zeitverschiebung |
"GET /informatik/index.html HTTP/1.1" | Anfrage an den Server |
200 | Antwort des Servers (200: erfolgreiche Anfrage) |
512 | Dateigröße (Anzahl der Bytes) |
Wenn Daten einer Logdatei automatisiert analysiert weren sollen, dann sollten sie in einer gut verarbeitbaren Form vorliegen.
Eine naheliegende Möglichkeit wäre, die einzelnen Einträge einer Logdatei als Zeichenketten darzustellen und alle diese Zeichenketten mit einer Liste zu verwalten.
[ '131.246.0.13 - - [24/Jul/2012:12:44:21 +0200] "GET /informatik/index.html HTTP/1.1" 200 512', '131.246.0.13 - - [24/Jul/2012:12:44:25 +0200] "GET /informatik/bild.png HTTP/1.1" 200 805' ]
Aufgabe 1
Welchen Nachteil hätte diese Darstellung der Daten mit Hilfe von Zeichenketten?
Verwaltung mit geschachtelten Listen
Wir werden im Folgenden versuchen, die Strukur der darzustellenden Daten besser zu erfassen. Vorerst betrachten wir nur den Zeitstempel eines Datensatzes.
Wie lässt sich ein Zeitstempel wie z.B. [24/Jul/2012:12:44:21 +0200]
strukturgetreu
darstellen? Wir benutzen hierzu zunächst geschachtelte Listen.
>>> zeitstempel = [[24, 'Jul', 2012], [12, 44, 21], ['+', 2, 0]] >>> zeitstempel [[24, 'Jul', 2012], [12, 44, 21], ['+', 2, 0]] >>> zeitstempel[0] [24, 'Jul', 2012] >>> zeitstempel[0][1] ... >>> zeitstempel[1] ... >>> zeitstempel[1][0] ... >>> zeitstempel[1][0:2] ... >>> zeitstempel[2][1] ...
Aufgabe 2
(a) Wie würde man analog den Zeitstempel [21/Jan/2008:12:44:01 +0100]
mit Listen darstellen?
(b) Im Python-Dialog oben fehlen etliche Auswertungsergebnisse (hier angedeutet durch ...). Stelle zunächst Vermutungen auf, was hier von Python als Ergebnis zurückgeliefert wird. Überprüfe anschließend deine Vermutungen.
(c) Welche Vorteile hat die Darstellung strukturierter Daten mit geschachtelten Listen?
(d) Überlege dir eine strukturierte Listendarstellung für die Daten einer Logdatei.
131.246.0.13 - - [24/Jul/2012:12:44:21 +0200] "GET /informatik/index.html HTTP/1.1" 200 512 131.246.0.13 - - [24/Jul/2012:12:44:25 +0200] "GET /informatik/bild.png HTTP/1.1" 200 805 # ...
Aufgabe 3
...