Das Python eine leitungsfähige Sprache ist, muss nicht mehr bewiesen werden. Insbesondere
die effizienten IO/Dateiverarbeitungs-Moeglichkeiten vereinfachen die Arbeit des Entwicklers ungemein.
Apropos Dateien: die Python-Schnittstellen zur Dateiverarbeitung sind nicht allein auf rein physische Dateien beschraenkt, 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 )zurueck.
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 <i>mymod.py</i> erzeugt.
<PRE>
#!/usr/bin/env python
def scanner(FP, linehandler):
for line in FP.readlines():
linehandler(line)
</PRE>
Die Funktion <i>scanner()</i> ist eine wiederverwendbare Software-Komponente. Sie erhaelt zwei Parameter: das File-Objekt <i>FP</i> sowie das Funktions-Objekt <i>linehandler</i>. 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, faellt die vielseitige Verwendbarkeit sofort ins Auge. Das untenstehende Beispiel verdeutlicht das Gesagte:
<PRE>
#!/usr/bin/env python
from mymod import scanner
def getFirstWord(line):
print line.split()[0]
if __name__ == '__main__':
FP = open('afile')
scanner(FP, getFirstWord)
</PRE>
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:
<PRE>
#!/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)
</PRE>
Dieses Beispiel (dasselbe waere mit StringIO moeglich) zeigt, wie flexibel man in der Tat mit einer Funktion wie <i>scanner()</i> 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
die effizienten IO/Dateiverarbeitungs-Moeglichkeiten vereinfachen die Arbeit des Entwicklers ungemein.
Apropos Dateien: die Python-Schnittstellen zur Dateiverarbeitung sind nicht allein auf rein physische Dateien beschraenkt, 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 )zurueck.
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 <i>mymod.py</i> erzeugt.
<PRE>
#!/usr/bin/env python
def scanner(FP, linehandler):
for line in FP.readlines():
linehandler(line)
</PRE>
Die Funktion <i>scanner()</i> ist eine wiederverwendbare Software-Komponente. Sie erhaelt zwei Parameter: das File-Objekt <i>FP</i> sowie das Funktions-Objekt <i>linehandler</i>. 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, faellt die vielseitige Verwendbarkeit sofort ins Auge. Das untenstehende Beispiel verdeutlicht das Gesagte:
<PRE>
#!/usr/bin/env python
from mymod import scanner
def getFirstWord(line):
print line.split()[0]
if __name__ == '__main__':
FP = open('afile')
scanner(FP, getFirstWord)
</PRE>
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:
<PRE>
#!/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)
</PRE>
Dieses Beispiel (dasselbe waere mit StringIO moeglich) zeigt, wie flexibel man in der Tat mit einer Funktion wie <i>scanner()</i> 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