1 Den Rechner für die Arbeit mit Python einrichten

Werbung
Python
Open Source Software wird gegenüber kommerziellen Lösungen immer wichtiger.
Addison-Wesley trägt dieser Entwicklung Rechnung mit den Büchern der Open Source
Library. Administratoren, Entwickler und User erhalten hier professionelles Know-how,
um freie Software effizient einzusetzen. Behandelt werden sowohl Themen wie Betriebssysteme, Netzwerke und Sicherheit als auch Programmierung.
Eine Auswahl aus unserem Programm:
Hibernate hat sich innerhalb kurzer Zeit zum De-Facto-Standard unter den
Object-Relational-Mappern (OR-Mapper) entwickelt. Die mit Hibernate entwickelten Konzepte und deren gelungene Umsetzung haben maßgeblich das Java
Persistence API innerhalb EJB 3.0 bestimmt. Es ist nun erstmals möglich, sowohl
in Java SE als auch Java EE mit denselben Persistenzmechanismen zu arbeiten.
Die Autoren führen anhand eines praxisnahen Beispiels in die Konzepte des
OR-Mappings und deren Umsetzung mithilfe von Hibernate ein. Anfänger
werden mithilfe von zunächst einfachen Beispielen an die Thematik herangeführt. Mit zunehmender Komplexität der Beispiele werden auch erfahrene Software-Entwickler eine Reihe neuer Informationen aus dem Bereich der ObjektPersistenz mitnehmen können. Die Integration von Hibernate in komplexe
Anwendungen, insbesondere solche mit web-basierten Architekturen, sowie
die Darstellung der neuesten Entwicklungen in diesem Bereich runden das
Buch ab.
Java-Persistence-API mit Hibernate
Bernd Müller, Harald Wehr
360 S.
Euro 39,95 (D), 41,10 (A)
ISBN 978-3-8273-2537-2
Python ist eine moderne, interpretierte, interaktive und objektorientierte
Skriptsprache, die sowohl unter Unix (inklusive Linux) als auch Windows
einsetzbar und für die meisten gängigen Betriebssysteme frei erhältlich ist.
In diesem Video-Training erläutert Ihnen der Trainer die Grundlagen der
Skriptsprache Python und geht schrittweise auf die Stärken der Sprache ein.
Auf diese Weise werden insbesondere Programmierer und Systemadministratoren angesprochen. Im Anschluss daran wird die eigentliche
Funktionsweise der Programmiersprache erklärt.
Python
Peter Walerowski
Euro 49,95 (D), 51,40 (A)
ISBN 978-3-8273-6080-9
Peter Walerowski
Grundlagen und Praxis
An imprint of Pearson Education
München • Boston • San Francisco • Harlow, England
Don Mills, Ontario • Sydney • Mexico City
Madrid • Amsterdam
Die Deutsche Bibliothek – CIP-Einheitsaufnahme
Die Deutsche Bibliothek verzeichnet diese Publikation in der Deutschen
Nationalbibliografie; detaillierte bibliografische Daten sind im Internet
über http://dnb.ddb.de abrufbar.
Die Informationen in diesem Produkt werden ohne Rücksicht auf einen eventuellen Patentschutz
veröffentlicht.
Warennamen werden ohne Gewährleistung der freien Verwendbarkeit benutzt.
Bei der Zusammenstellung von Texten und Abbildungen wurde mit größter Sorgfalt vorgegangen.
Trotzdem können Fehler nicht vollständig ausgeschlossen werden.
Verlag, Herausgeber und Autoren können für fehlerhafte Angaben und deren Folgen weder eine
juristische Verantwortung noch irgendeine Haftung übernehmen.
Für Verbesserungsvorschläge und Hinweise auf Fehler sind Verlag und Herausgeber dankbar.
Alle Rechte vorbehalten, auch die der fotomechanischen Wiedergabe und der Speicherung in
elektronischen Medien.
Die gewerbliche Nutzung der in diesem Produkt gezeigten Modelle und Arbeiten ist nicht zulässig.
Fast alle Hardware- und Softwarebezeichnungen und weitere Stichworte und sonstige Angaben, die in diesem
Buch verwendet werden, sind als eingetragene Marken geschützt. Da es nicht möglich ist, in allen Fällen zeitnah zu
ermitteln, ob ein Markenschutz besteht, wird das ® Symbol in diesem Buch nicht verwendet.
Umwelthinweis:
Dieses Produkt wurde auf chlorfrei gebleichtem Papier gedruckt.
Um Rohstoffe zu sparen, haben wir auf Folienverpackung verzichtet.
10 9 8 7 6 5 4 3 2 1
09 08
ISBN 978-3-8273-2517-4
© 2008 by Addison-Wesley Verlag,
ein Imprint der Pearson Education Deutschland GmbH
Martin-Kollar-Straße 10–12, D-81829 München/Germany
Alle Rechte vorbehalten
Einbandgestaltung: Marco Lindenbeck, webwo GmbH ([email protected])
Lektorat: Brigitte Alexandra Bauer-Schiewek, [email protected]
Korrektorat: Petra Kienle
Fachlektorat: Daniel Koch
Herstellung: Monika Weiher, [email protected]
Satz: Reemers Publishing Services GmbH, Krefeld (www.reemers.de)
Druck: Bercker Graph. Betrieb, Kevelaer
Printed in Germany
Inhaltsübersicht
Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
1
Den Rechner für die Arbeit mit Python einrichten . . . . . . . . . . . . . . . . . . . . . .
17
2
Skripte schreiben und ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
3
Die Struktur von Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
4
Klassen entwickeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
5
Arbeiten mit Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
6
Dateien auslesen und schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
7
Arbeiten mit dem Laufzeit- und dem Betriebssystem . . . . . . . . . . . . . . . . . . .
157
8
Grafische Benutzeroberflächen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
175
9
Webentwicklung mit Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
10 Bildbearbeitung mit der Python Imaging Library . . . . . . . . . . . . . . . . . . . . . .
127
271
A
Eingebaute Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
B
Built-in Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
C
Link-Verzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
D
Webhoster mit mod_python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
311
Inhaltsverzeichnis
1
Einleitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
13
Den Rechner für die Arbeit mit Python einrichten . . . . . . . . . . . . . . . . . . . . . .
17
1.1 Python installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
17
1.1.1
Installation unter Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
1.1.2
Installation unter Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
18
1.2 Python interaktiv verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
19
1.3 Python IDLE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
20
1.3.1
Grundlegende Funktionsweise . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
1.3.2
Class Browser und Path Browser . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
22
1.3.3
Der Debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
24
1.3.4
Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
25
1.4 Python mit Eclipse entwickeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2
26
1.4.1
Eclipse und PyDev installieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
26
1.4.2
Eclipse und PyDev einrichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
28
1.4.3
Die Oberfläche von PyDev . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
30
1.4.4
Debugging in Eclipse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
33
Skripte schreiben und ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
2.1 Syntaxregeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
2.1.1
Zeilennotation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
35
2.1.2
Anweisungsblöcke durch Einrückung . . . . . . . . . . . . . . . . . . . . . . . . . . .
36
2.1.3
Kommentare . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
37
2.1.4
Regeln für Namen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
2.2 Skripte ausführen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
3
20
38
40
2.2.1
Unter Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
40
2.2.2
Unter Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
41
Die Struktur von Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
3.1 Daten sind Objekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
43
3.2 Datentypen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
44
3.2.1
Zahlen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
45
3.2.2
Sequenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
49
3.2.3
Arbeiten mit Sequenzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
53
3.2.4
Assoziative Felder . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
Inhaltsverzeichnis
4
3.2.5
Arbeiten mit Dictionarys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
59
3.2.6
Mengen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
63
3.2.7
Spezielle Typen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
3.2.8
Typenwandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
64
3.3 Flache und tiefe Kopien von Listen und Dictionarys . . . . . . . . . . . . . . .
67
3.4 Kontrollfluss . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
3.4.1
Bedingte Anweisungen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
68
3.4.2
Operatoren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
71
3.4.3
Schleifen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
76
3.5 Ausnahmen behandeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
3.5.1
Ausnahmen abfangen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
82
3.5.2
Vor dem Abbruch aufräumen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
84
3.6 Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
3.6.1
Funktionsaufrufe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
85
3.6.2
Funktionen definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
86
3.6.3
Namensräume . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
88
3.6.4
Parameter und ihre Übergabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
91
3.6.5
Lokale Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
95
3.6.6
Rekursion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
97
3.6.7
Lambda-Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
98
3.6.8
Docstrings und kommentierte Parameter . . . . . . . . . . . . . . . . . . . . . . .
99
Klassen entwickeln . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.1 Die Klasse als Bauplan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
4.2 Eine Klasse definieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 105
4.3 Eine Klasse aufrufen: Objekte bilden . . . . . . . . . . . . . . . . . . . . . . . . . . . 106
4.4 Ein genauer Blick auf Klassenattribute . . . . . . . . . . . . . . . . . . . . . . . . . . 108
4.5 Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
4.5.1
110
Statische Methoden und Klassenmethoden . . . . . . . . . . . . . . . . . . . . .
113
4.6 Zugriffe steuern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
115
4.7 Polymorphie – Operatoren überladen . . . . . . . . . . . . . . . . . . . . . . . . . . .
119
4.8 Vererbung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122
4.9 Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124
4.9.1
8
Suchpfade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
125
Inhaltsverzeichnis
5
Arbeiten mit Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
127
5.1 Die Methoden des String-Objekts . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 128
5.1.1
5.1.2
5.1.3
5.1.4
5.1.5
5.1.6
Groß- und Kleinschreibung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zeichenketten überprüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Suchen und Ersetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Bereinigen und Auffüllen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Zerlegen und Zusammensetzen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Kodieren und Decodieren . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
128
128
129
130
131
132
5.2 Variable Zeichenketten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133
5.3 Das Modul string . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135
5.4 Das Modul textwrap . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 136
5.5 Reguläre Ausdrücke . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 138
5.5.1
6
Das Modul re . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139
Dateien auslesen und schreiben . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
6.1 Dateien anlegen und öffnen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 143
6.2 Methoden zum Schreiben, Lesen, Speichern . . . . . . . . . . . . . . . . . . . . . 145
6.3 Die Cursorposition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 146
6.4 Praxis: einen Serienbrief erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147
6.5 Beliebige Datentypen speichern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 150
6.6 Praxis: Adressdaten abspeichern . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
151
6.7 String-Objekt als Zwischenspeicher . . . . . . . . . . . . . . . . . . . . . . . . . . . . 154
7
Arbeiten mit dem Laufzeit- und dem Betriebssystem . . . . . . . . . . . . . . . . . . .
157
7.1 Das Modul sys . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 157
7.1.1
7.1.2
Argumente für Skripte, Skripte beenden . . . . . . . . . . . . . . . . . . . . . . . . . 159
Standardein- und -ausgabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161
7.2 Das Modul os . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
7.2.1
7.2.2
7.2.3
7.2.4
7.2.5
8
Konstanten für die Dateinamenverwaltung . . . . . . . . . . . . . . . . . . . . . . .
Orientieren und prüfen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Anlegen, ändern, löschen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Datei- und Verzeichnisattribute auslesen . . . . . . . . . . . . . . . . . . . . . . . .
Verzeichnisbäume durchlaufen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
Grafische Benutzeroberflächen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
161
162
163
165
167
171
175
8.1 Grundlagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 176
8.2 Oberflächenelemente: Widgets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 180
8.2.1
8.2.2
Allgemeine Widget-Optionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 182
Allgemeine Widget-Methoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 183
9
Inhaltsverzeichnis
8.3 Die einzelnen Widget-Klassen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185
8.3.1
Tk . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
185
8.3.2
Button . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
187
8.3.3
Checkbutton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
188
8.3.4
Entry . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
190
8.3.5
Label . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
191
8.3.6
Listbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
192
8.3.7
Menu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
193
8.3.8
Menubutton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
198
8.3.9
Message . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
199
8.3.10 OptionMenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
8.3.11
PhotoImage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 200
8.3.12 Radiobutton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
201
8.3.13 Scale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203
8.3.14 Scrollbar . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204
8.3.15 Spinbox . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 207
8.3.16 Text . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 208
8.3.17 Frame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
214
8.3.18 LabelFrame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
215
8.3.19 PanedWindow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
216
8.3.20 Toplevel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
217
8.4 Layoutmanager . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 218
8.4.1
Die Methode pack() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.4.2
Die Methode grid() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 222
219
8.4.3
Die Methode place() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 224
8.4.4
Weitere Layoutmethoden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 226
8.5 Praxis: Oberfläche für Serienbriefprogramm . . . . . . . . . . . . . . . . . . . . . 227
10
8.5.1
Der Grundaufbau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 227
8.5.2
Das Menü . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230
8.5.3
Die Musterbriefoberfläche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
8.5.4
Die Adresseingabe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233
231
8.5.5
Wechsel zwischen den Ansichten . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 235
8.5.6
Funktionen der Musterbriefansicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236
8.5.7
Funktionen der Adressenansicht . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 237
8.5.8
Generierung der Serienbriefe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 239
Inhaltsverzeichnis
9
Webentwicklung mit Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
9.1 CGI-Skripte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 241
9.1.1
Aufbau eines CGI-Skripts mit Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242
9.1.2
Inhalte dynamisch einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 245
9.1.3
Den Datenspeicher bedienen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 246
9.1.4
Reine Skriptverarbeitung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 250
9.1.5
Fehlerbehandlung . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 251
9.2 Python Server Pages mit mod_python . . . . . . . . . . . . . . . . . . . . . . . . . . 253
9.2.1
Installation und Konfiguration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253
9.2.2
Sicherheitsaspekte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 256
9.2.3
PSP-Schreibweisen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257
9.2.4
Daten auslesen und Formulardaten speichern . . . . . . . . . . . . . . . . . . . . 258
9.2.5
PSP als Template-Sprache . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261
9.3 Anbindung an relationale Datenbanken . . . . . . . . . . . . . . . . . . . . . . . . . 266
9.3.1
Eine Datenbankverbindung aufbauen und Daten auslesen . . . . . . . . . 267
9.3.2
Die Webanwendung mit der Datenbank verbinden . . . . . . . . . . . . . . . . 269
10 Bildbearbeitung mit der Python Imaging Library . . . . . . . . . . . . . . . . . . . . . .
271
10.1 Bilddateien erzeugen, öffnen, speichern und anzeigen . . . . . . . . . . . . 272
10.2 Bildattribute auslesen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 274
10.3 Maße ändern, drehen, Kopien und Ausschnitte erzeugen . . . . . . . . . . 276
10.3.1
Vorschaubilder erzeugen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 278
10.3.2 Bilder drehen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 279
10.3.3 Bildteile kopieren und einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 280
10.4 Kanäle und Masken . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 283
10.4.1
Masken verwenden . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284
10.5 Zeichnen und Zeichen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 285
10.5.1
Text ins Bild einfügen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287
10.6 Ein Captcha erstellen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288
A
Eingebaute Funktionen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 295
B
Built-in Exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301
C
Link-Verzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305
D
Webhoster mit mod_python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309
Stichwortverzeichnis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . .
311
11
Einleitung
Python-Programme kann man lesen! Klingt seltsam, trifft aber einen der wesentlichen
Pluspunkte dieser Sprache ziemlich genau. Es gibt sicherlich guten und es gibt
schlechten Programmierstil. Hat man einen Quelltext vor sich, den man nicht selbst
geschrieben hat, wird man, auch wenn er in gutem Stil geschrieben ist, nicht mit den
Kommentaren allein auskommen, um ihn zu verstehen. In vielen Fällen ist es notwendig, die Programmzeilen und Anweisungsblöcke selbst zu lesen. Die meisten Sprachen machen es einem da nicht leicht. Seien es die Namen von Standardfunktionen
oder eine Flut von Klammern und anderen Zeichen, die die Dateien füllen – man
muss den Quelltext selbst lesen und braucht oft enorm viel Zeit, um die Strukturen zu
durchschauen. Python-Quelltexte erfreuen sich dagegen einer bestechenden Schlichtheit, die es einem ermöglicht, sehr schnell und direkt die Programmstruktur zu entschlüsseln.
Das liegt an Pythons Syntax, die ohne Klammern für Befehlsblöcke auskommt, keine
Anweisungsendzeichen verlangt und immer dort Einrückungen hat, wo sie wirklich
verlangt sind. Und das ist keinesfalls übertrieben, denn die Einrückungen machen
den Befehlsblock deutlich und sind damit notwendig, um ein lauffähiges Skript zu
schreiben. Das liegt aber auch daran, dass man mit Python für eine Funktionalität
meistens deutlich weniger Quelltext braucht als in anderen Sprachen. Wo andere
zehn Zeilen benötigen, braucht Python nur fünf oder nur drei. Python ist eher minimalistisch. Die Zahl der reservierten Wörter ist gering, was den Leistungsumfang
aber keineswegs schmälert. Vielmehr sind die Basissprachkonstrukte auf das Notwendigste reduziert.
Wenn man häufig mit verschiedenen Sprachen umgehen muss, ist man immer wieder
verblüfft, wie einfach und klar sich in Python so manches regeln lässt, und fragt sich,
warum andere nicht schon längst darauf gekommen sind.
Aber bei allem Lob, es geht um ein wenig mehr: Wenn man eine Sprache schneller
erfassen kann als andere und wenn man mit dieser Sprache vergleichsweise weniger
Aufwand für das gleiche Ergebnis hat, erreicht man in kürzerer Zeit das gesteckte
Ziel. Wenn daneben andere meinen Code schnell verstehen können und ich den von
anderen, dann wird die Arbeit im Team dadurch effizienter. Und hier werden
Pythons Vorteile zu echten Kostenvorteilen.
Einleitung
Es ist wie mit einem guten Werkzeug: Es ist sicherlich teurer in der Anschaffung, aber
die Arbeit gelingt damit besser, so dass sich die Investition schnell amortisiert. Aber
der Vergleich hinkt. Python ist in der Anschaffung nicht teurer als andere. Es ist eine
frei verfügbare Sprache.
Die genannten Vorzüge von Python haben die Sprache auch zu einer der beliebtesten
Sprachen unter Informatiklehrern gemacht. Die Einstiegshürde ist gering und man
erzielt schnell Ergebnisse. So lässt sich wilden Kids das Programmieren leichter beibringen. Ganz nebenbei gehen die Schüler dann auch noch mit einer Sprache um, die
konsequent objektorientiert ist. Alle Datentypen sind Objekte und selbst wenn man
nur prozedural programmiert, man arbeitet eigentlich doch immer mit Objekten.
Python schafft auf diese Weise etwas, was kaum eine andere Sprache erreicht: Programmieren wird für Personenkreise zugänglich, denen dieses Feld sonst zu komplex
war. Davon profitieren auch die anderen Sprachen, denn wer erst einmal Gefallen an
der Programmierung durch und mit Python gefunden hat, wird sich auch andere
Sprachen früher oder später einmal anschauen.
Man darf und sollte bei aller Simplizität, die Python mitbringt, aber nicht glauben,
dass diese Sprache ein Spielzeug wäre. Schaut man sich einmal an, wer Python einsetzt und welche Software auf Python basiert, wird man schnell sehen, dass man es
mit einem effizienten und professionellen Werkzeug zu tun hat. Die Python-Webseite
gibt hier einen beeindruckenden Überblick (http://www.python.org/about/success/).
Aber es wird auch in weniger sichtbaren Bereichen eingesetzt. In der Steuerung von
Linux-Rechnern mit Shell-Skripten steht Python heute gleichberechtigt neben Perl.
Die sehr erfolgreiche Ubuntu-Distribution nimmt hier eine Vorreiterrolle ein. Python
wird sehr viel im wissenschaftlichen Bereich eingesetzt, um spezielle Programme für
die Auswertung von Forschungsdaten zu entwickeln. Eine unbekannte Zahl von
Websites nutzen die unterschiedlichen python-basierten Webframeworks wie
Django, Turbo Gears oder Zope, – um nur die großen zu nennen. (Im Anhang finden
sich Links zu weiteren Frameworks.) Und nicht zuletzt verwendet Google für seine
vielfältigen Applikationen und Dienste bevorzugt Python. Der Python-Schöpfer
Guido von Rossum arbeit derzeit übrigens für Google.
Dieses Buch behandelt deshalb auch ein weites Spektrum der Einsatzmöglichkeiten
von Python. Nach einer grundlegenden Einführung in die Sprache wird gezeigt, wie
man Texte verarbeitet und mit Dateien und dem Dateisystem umgeht. Es wird die
Entwicklung eigener Klassen dargelegt und das Erstellen von grafischen Benutzeroberflächen erläutert. Ein Kapitel widmet sich der Be- und Verarbeitung von Bilddateien und nicht zuletzt wird das Programmieren für das Internet mit Python
beschrieben.
Eine Reihe von praktischen Beispielen zeigen die genauen Vorgehensweisen. Diese
Beispiele und jegliche Software, die zum Durcharbeiten notwendig ist, finden sich auf
der beiliegenden CD. Sie können also direkt loslegen und selbst erfahren, dass es einfach Spaß macht, mit Python zu arbeiten.
14
Einleitung
Mein Dank
Es gibt eine große Menge an Wissen in der Python-Community, von dem ich profitiert habe und weiterhin profitiere. Dieses Buch ist auch Ausdruck meines Danks an
die Community, der ich damit etwas zurückgeben möchte.
Ferner geht mein Dank an Andreas Herold für die Korrekturen und das Hineinschlüpfen in die Rolle des Lesers sowie an Manuel Herzog für die Erstellung astreiner
Grafiken.
Für die kritischen und konstruktiven Kommentare danke ich Daniel Koch. Das Buch
hat davon deutlich profitiert.
Und nicht zuletzt will ich denen danken, die mir während der Arbeit an diesem Buch
den Rücken freigehalten haben und mich leider viel zu selten gesehen haben.
15
1
1.1
Den Rechner für die Arbeit
mit Python einrichten
Python installieren
Bei einem Linux-Rechner kann man je nach Distribution das Glück haben, bereits mit
Python arbeiten zu können. Wie Perl gehört es in der Linux-Welt vielfach zur Grundausstattung des Rechners, so z. B. bei Debian und Ubuntu. Und auch Macintosh-Rechner mit MacOS X haben Python bereits installiert (wenn auch meistens nicht in der
aktuellsten Version). Aber die Nutzer anderer Betriebssysteme können beruhigt sein –
die Zeit, die die Installation von Python benötigt, reicht für eine Kaffeepause nicht aus.
Für jede Plattform findet man die entsprechende Python-Version unter http://www.
python.org/download/. Wer eine Installation aus den Quellen bevorzugt, kann einen der
beiden zur Verfügung stehenden Tarballs herunterladen. Unter Linux kann natürlich
auch die Paketverwaltung der jeweiligen Distribution verwendet werden, um Python
zu installieren. Allerdings dauert es mitunter eine Weile, bis die aktuellste Version in
die Distribution aufgenommen wird.
Für die Windows-Plattform bietet die Download-Seite Installationsprogramme an. Es
gibt jeweils eines für Rechner mit x86-Prozessoren sowie für 64-Bit-Architekturen von
AMD und Intel (Itanium). Schließlich kann auch für MacOS X ein Installer heruntergeladen werden, der sowohl für PPC- als auch Intel-Macs Verwendung findet. Mit
ihm lässt sich Python auf dem MacOS auf den aktuellsten Stand bringen. Es sind hier
aber die Systemvoraussetzungen zu beachten (siehe http://www.python.org/download
/mac/). Python 2.5 benötigt wenigstens die MacOS X Version 10.3.
Neben den bereits genannten Plattformen unterstützt Python noch viele weitere Plattformen wie z. B. BeOs, Solaris, AIX oder HP-UX. Auf diesen Plattformen ist eine
Installation aus den Quellen anzuraten. Die kanadische Firma ActiveState bietet spezielle Versionen für einige dieser Plattformen an (http://aspn.activestate.com/ASPN/
Downloads/ActivePython). Diese stehen aber nicht unter einer Open-Source-Lizenz.
Wer eine (eventuell auch ältere) Version für eine spezielle Plattform benötigt, wird
auf der Internetseite http://www.python.org/download/other/ wahrscheinlich fündig.
Von Nokia S60 über Psion und Playstation bis MorphOS sind hier einige Plattformen
aufgelistet.
Herunterladen