|
Python-Tipp: Flexible Dateiverarbeitung
Das Python eine leistungsfähige Sprache ist, muss nicht mehr bewiesen werden. Insbesondere die effizienten IO/Dateiverarbeitungs-Möglichkeiten vereinfachen die Arbeit des Entwicklers ungemein. Apropos Dateien: die Python-Schnittstellen zur Dateiverarbeitung sind nicht allein auf rein physische Dateien beschränkt, sondern arbeiten mit jedem Objekt gut zusammen, welches die erwarteten Schnittstellen zur Verfügung stellt. Der folgende Tipp geht auf ein Beispiel von Mark Lutz (der Autor von Learning Python und Programming Python, beide Bücher sind im OReilly-Verlag erschienen) zurück. Es ist schon eindrucksvoll, wie man mit wenigen Zeilen Code schnell (!) zu effektiven Ergebnissen kommt. Los geht es. Zuerst wird ein kleines Modul mit dem Namen mymod.py erzeugt.
#!/usr/bin/env python def scanner(FP, linehandler): for line in FP.readlines(): linehandler(line)
Die Funktion scanner() ist eine wiederverwendbare Software-Komponente. Sie erhält zwei Parameter: das File-Objekt FP sowie das Funktions-Objekt linehandler. So weit, so gut. Auf den ersten Blick sieht das alles nicht besonders aufregend aus. Und vor allem, was kann man damit machen? Nun, wenn Sie diese Funktion in ein Modul importieren, fällt die vielseitige Verwendbarkeit sofort ins Auge. Das untenstehende Beispiel verdeutlicht das Gesagte:
#!/usr/bin/env python from mymod import scanner def getFirstWord(line): print line.split()[0] if __name__ == '__main__': FP = open('afile') scanner(FP, getFirstWord)
Sieht schon viel besser aus. Aber das war noch nicht alles. In Beispiel #2 wird der Aktionsradius erweitert (eingedenk der Bemerkungen am Anfang des Beitrages). Aufgepasst:
#!/usr/bin/env python from mymod import scanner class Stream: def readlines(self): return ['a\n', 'b c d\n'] def getFirstWord(line): print line.split()[0] if __name__ == '__main__': obj = Stream() scanner(obj, getFirstWord)
Dieses Beispiel (dasselbe wäre mit StringIO möglich) zeigt, wie flexibel man in der Tat mit einer Funktion wie scanner() in Python arbeiten kann. Wie gesagt, solange die passenden Schnittstellen angeboten werden, gibt es keinerlei Probleme. Da muss der Leser doch unweigerlich zum Python-Fan werden, oder? Viel Spass. Thomas Kaufmann
|