Eine Datenstruktur für Logdaten

Darstellung der Daten als Zeichenkette

Wir betrachten weiterhin Daten einer Webserver-Logdatei:

...
    85.180.188.237 - - [28/Dec/2015:13:38:12 +0100] "GET /programmierung/kara/algorithmen/exkurs_problemloesen HTTP/1.1" 200 5010 "https://www.google.de/" "Mozilla/5.0 (Linux; Android 4.4.2; de-de; SAMSUNG SM-N7505 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36"
    85.180.188.237 - - [28/Dec/2015:13:38:12 +0100] "GET /content/programmierung/kara/algorithmen/exkurs_problemloesen/kleeblatt_suchen_beispiel1_vorher.png HTTP/1.1" 200 3679 "http://www.inf-schule.de/programmierung/kara/algorithmen/exkurs_problemloesen" "Mozilla/5.0 (Linux; Android 4.4.2; de-de; SAMSUNG SM-N7505 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36"
...

Wenn man solche Daten zeilenweise aus einer Logdatei einliest, werden sie meist als Zeichenkette dargestellt.

Aufgabe 1

Die Darstellung als Zeichenkette eignet sich aber nicht sonderlich gut für eine weitere Verarbeitung. So ist beispielsweise der Zugriff auf das Datum schwierig. Probiere das selbst aus. Worin besteht die Schwierigkeit hier?

>>> daten = '    85.180.188.237 - - [28/Dec/2015:13:38:12 +0100] "GET /programmierung/kara/algorithmen/exkurs_problemloesen HTTP/1.1" 200 5010 "https://www.google.de/" "Mozilla/5.0 (Linux; Android 4.4.2; de-de; SAMSUNG SM-N7505 Build/KOT49H) AppleWebKit/537.36 (KHTML, like Gecko) Version/1.5 Chrome/28.0.1500.94 Mobile Safari/537.36"'
>>> daten[???]
'28/Dec/2015'
>>> daten = '    109.91.38.195 - - [28/Dec/2015:12:27:53 +0100] "GET /rechner/digitaltechnik/grundgatter/fachkonzept_grundgatter HTTP/1.1" 200 4049 "http://www.inf-schule.de/rechner/digitaltechnik/grundgatter" "Mozilla/5.0 (Windows NT 10.0; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/47.0.2526.73 Safari/537.36 OPR/34.0.2036.25"'
>>> daten[???]
'28/Dec/2015'

Darstellung der Daten mit Datenstrukturen

Viel günstiger ist es, wenn die Daten in einer strukturierten Form vorliegen. Hierzu benutzt man passende Datenstrukturen - im vorliegenden Fall die Datenstruktur Tupel.

Zur Verdeutlichung betrachten wir zunächst die Darstellung eines Zeitstempels. Zur Verwaltung eines Zeitstempels eignet sich die Datenstruktur Tupel.

>>> zeitstempel = ((24, 'Jul', 2012), (12, 44, 21), ('+', 2, 0))
>>> zeitstempel
...
>>> zeitstempel[0]
...
>>> zeitstempel[0][1]
...
>>> zeitstempel[1]
...
>>> zeitstempel[1][0]
...
>>> zeitstempel[1][0:2]
...
>>> zeitstempel[2][1]
...

Aufgabe 2

(a) Führe den Python-Dialog selbst aus.

(b) Warum ist der Zugriff auf die Bestandteile eines Zeitstempels bei einer geeigneten Tupeldarstellung einfacher als bei einer Darstellung als Zeichenkette?

Aufgabe 3

Hier eine weitere Möglichkeiten, auf die Bestandteile eines Tupels zuzugreifen. Teste auch diese Version.

>>> zeitstempel = ((24, 'Jul', 2012), (12, 44, 21), ('+', 2, 0))
>>> (datum, uhrzeit, zeitverschiebung) = zeitstempel
>>> datum
...
>>> (tag, monat, jahr) = datum
>>> monat
...

Aufgabe 4

Die Daten aus einer Webserver-Logdatei sollen mit Hilfe von Tupeln adäquat dargestellt werden. Verdeutliche anhand eines Beispiels, wie man das machen könnte.

X

Fehler melden

X

Suche