Python: Gültiger HTML-Code mit "regular expressions"

von Kai Surendorf

Hier dreht sich alles um die so genannten "regular expressions". Die sind zwar mächtig, aber ein hervorragendes Werkzeug, um gültigen HTML-Code zu erzeugen.

Eine Funktion für gültigen Code
Das in diesem Artikel erstellte Gästebuch-Script regelte die Eingaben und besorgte auch die Ausgabe. Allerdings wurden die Eingaben des Surfers nicht in HTML umgewandelt, sondern so, wie sie vorgenommen wurden, auch in die Datei eingetragen. Dies kann bei anderen Betriebssystemen schnell zu Darstellungsfehlern führen. Auch wäre es doch nützlich, gewisse Schimpfworte ausfiltern zu können, um eventuelle Flamewars gleich auf niedriger Flamme halten zu können. Mit dem Modul für regular expressions lässt sich diese Aufgabe bewältigen. Ergänzen wir also das Script um eine entsprechende Funktion.

Gerade bei größeren Projekten ist es nützlich, wenn wiederkehrende Abläufe nicht jedes Mal neu eingefügt, sondern in einer Funktion eingekapselt werden. Python bietet neben den classes functions, die etwas einfacher zu nutzen sind. Eine function wird mit def name (variablen): deklariert. Um die function aufrufen zu können, braucht sie natürlich einen eindeutigen Namen. Auch will man, dass an die function etwas übergeben werden kann, das sie manipuliert. Diese Variablen werden in den Klammern angegeben.

Für diese Variablen gilt, dass sie innerhalb der function mit dem Namen angesprochen werden, den Sie in den Klammern definiert haben und nicht mit dem, den Sie sonst im Programm verwenden. Mit einem Doppelpunkt wird die Deklaration beendet. In den Folgezeilen gilt, dass jede Zeile zur Funktion gehört, die mit mindestens einem Tabulator eingerückt ist. Sobald wieder eine Programmzeile ganz am linken Rand ohne Einrückung beginnt, endet die function.

Aufrufen können Sie eine function ganz einfach, indem Sie deren Namen an entsprechender Stelle einfügen. Wollen Sie also, dass der in einer String-Variable enthaltene Text in gültigen HTML-Code umgewandelt wird, so übergeben Sie die Variable an die function vielleicht mit ergebnis = html_erzeugen (zu_modifizierendes). Die Funktion manipuliert die Variable und schreibt das Ergebnis in diese zurück.

Die Funktion html_erzeugen
Zuerst muss das Modul in das Script eingebunden werden. Dies erfolgt zu Beginn des Scriptes mit der Anweisung import re. (re ist der Name des Moduls für regular expressions.) Die Funktion soll aus zwei Kern-Elementen bestehen. In einer separaten Text-Datei finden sich sowohl die zu ersetzenden Ausdrücke als auch die, die stattdessen eingefügt werden sollen. Jedes Paar steht in einer eigenen Zeile und die Einträge sind durch ein Komma getrennt. Diese Text-Datei soll Zeile für Zeile abgearbeitet werden. Im zweiten Schritt soll das gerade aktuelle Ersetzungs-Paar in seine Bestandteile aufgebrochen und der Ersetzungsvorgang durchgeführt werden.

Der Code:

def html_erzeugen (message):
message = str (message)
datei = open ('glossar.txt', 'r')
glossar = datei.readlines()
datei.close ()
laenge = len (glossar)
for i in range (laenge):
aktuell = glossar [i]
temp = re.split (',', aktuell)
temp[1] = re.sub ('\n', '', temp[1])
message = re.sub (temp[0], temp[1], message)
return message

Beispiel für die zugehörige Glossar-Datei:

ü,ü
ä,ä
Ä,Ä


Das Funktionsprinzip
Zuerst erzeugen wir eine function mit dem Namen html_erzeugen. An diese Funktion soll eine Variable übergeben werden (message). Diese Variable wird zur Sicherheit noch einmal in einen String [message = str (message)] umgewandelt, um hier Fehler auszuschließen.
Der erste Schritt ist nun, die Datei glossar.txt zu öffnen im Read-Only Modus. [datei = open ('glossar.txt', 'r')] Anschließend übergeben wir den kompletten Inhalt der Glossar-Datei an die Liste mit dem Namen glossar [glossar = datei.readlines()]. Nun wird die Datei wieder geschlossen [datei.close ()]. Die Liste glossar besteht aus so vielen Einträgen, wie die glossar.txt Zeilen hat. Jede Zeile steht für einen durchzuführenden Ersetzungsvorgang.

Nach diesen Vorarbeiten gilt es, die Liste abzuarbeiten. Dies erfolgt mit Hilfe einer For_Next Schleife, die so oft durchlaufen wird, wie die Liste glossar Einträge hat. Die Länge der Liste können Sie mit dem Befehl len() Wir erzeugen die Variable aktuell, die den aktuellen Eintrag von glossar enthält [aktuell = glossar [i]]. Diese teilen wir mit Hilfe einer regular expression Funktion auf in das, was vor dem Komma steht, und das, wodurch ersteres ersetzt werden soll und hinter dem Komma steht [temp = re.split (',', aktuell)]. temp ist jetzt eine Liste mit zwei Einträgen. temp[0] enthält, was vor dem Komma stand, temp[1], das hinter dem Komma befindliche. Bei temp[1] muss noch der Zeilenumbruch (\n) entfernt werden. Er stammt noch aus der Text-Datei, wird mit ausgelesen und kann beim Ersetzungsvorgang eventuell für Probleme sorgen.

Nun kann der eigentliche Ersetzungsvorgang erfolgen [message = re.sub (temp[0], temp[1], message)]. Die Variable message enthält nun den vorhergehenden Inhalt, wobei zum Beispiel das ü durch ü ersetzt wurde. Nun wird die Schleife erneut durchlaufen, wobei der zweite Eintrag der Liste ersetzt wird, aus dem ä also ä wird. Sind alle Ersetzungen durchgeführt, muss abschließend das Ergebnis, das in der Variable message vorliegt, zurückgegeben werden. Dies leistet der Befehl return.

Dieses Verfahren lässt sich natürlich nicht nur für Umlaute verwenden, auch für sonstige Begriff oder Wörter. Um einen Schutz vor unerwünschten Begrifflichkeiten zu gewährleisten, lässt sich die Glossar-Datei natürlich beliebig erweitern.

 

 
   Anzeigen

Navigation:    Webdesign - Programmierung - Web Grafiken - Software Guides - Tools - Templates - Schriftarten - Seminare - IT News
Partner:   Template OK - PCopen - SITEopen - PCopen Schweiz - HTMLopen Schweiz - VirtualUniversity.ch - WEB-SET.com - YesMMS - Job und Karriere