python - decitre.fr : livres, ebooks, romans, bd, polars ... · editions eni python les...

40
Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

Upload: dinhcong

Post on 16-Sep-2018

234 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

Editions ENI

PythonLes fondamentaux du langage

(Nouvelle édition)

CollectionRessources Informatiques

Table des matières

Page 2: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

1Table des matières

Avant-propos1. Contenu de l’ouvrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29

2. À destination des enseignants et élèves . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 31

3. À destination des chercheurs ou doctorants . . . . . . . . . . . . . . . . . . . . . . . . . 32

4. À destination de ceux qui viennent d’un autre langage . . . . . . . . . . . . . . . . 33

Partie 1 : Les atouts de Python

Chapitre 1.1Python dans le paysage informatique

1. Petite histoire des langages informatiques . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.1 Informatique théorique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 351.2 Chronologie de l’informatique. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36

1.2.1 Évolutions des problématiques liées à l’informatique . . . . . . . . 361.2.2 Chronologie des langages informatiques . . . . . . . . . . . . . . . . . . 37

1.3 Histoire de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421.3.1 La genèse. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 421.3.2 Extension du périmètre fonctionnel. . . . . . . . . . . . . . . . . . . . . . 421.3.3 Évolution de la licence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 431.3.4 Avenir . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

2. Typologie des langages de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . 442.1 Paradigmes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 44

2.1.1 Définition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 442.1.2 Paradigme impératif et dérivés . . . . . . . . . . . . . . . . . . . . . . . . . . 452.1.3 Paradigme objet et dérivés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452.1.4 Programmation orientée aspect . . . . . . . . . . . . . . . . . . . . . . . . . 462.1.5 Paradigme fonctionnel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 462.1.6 Paradigme logique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472.1.7 Programmation concurrente . . . . . . . . . . . . . . . . . . . . . . . . . . . . 472.1.8 Synthèse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 47

Les exemples à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage RI2PYT dans la zone de rechercheet validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Page 3: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

2Les fondamentaux du langage

Python

2.2 Interopérabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 482.3 Niveau de programmation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 49

2.3.1 Machine . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 492.3.2 Bas niveau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 502.3.3 Haut niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

2.4 Typage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512.4.1 Faible vs fort . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 512.4.2 Statique vs dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 51

2.5 Grammaire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522.5.1 Langages formels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 522.5.2 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 52

3. Situer Python dans ce paysage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.1 Typologie de Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53

3.1.1 Grammaire et syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.1.2 Typage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.1.3 Niveau de programmation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 533.1.4 Paradigmes supportés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 54

3.2 Positionnement stratégique du langage Python . . . . . . . . . . . . . . . . . . 543.2.1 Segments de marchés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.2.2 Niveau de complexité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 543.2.3 Forces du langage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553.2.4 Points faibles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55

3.3 Intégration avec d’autres langages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553.3.1 Extensions C. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 553.3.2 Intégration de programmes écrits en C . . . . . . . . . . . . . . . . . . . 553.3.3 Intégration de programmes Python dans du C . . . . . . . . . . . . . 563.3.4 Intégration de programmes écrits en Java . . . . . . . . . . . . . . . . . 563.3.5 Intégration de programmes Python dans Java . . . . . . . . . . . . . . 563.3.6 Autres intégrations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56

3.4 Intégration de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563.4.1 SGBD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 563.4.2 LDAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.4.3 XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.4.4 Système de fichiers et systèmes d’exploitation . . . . . . . . . . . . . 573.4.5 Flux réseau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

3.5 Réalisation d’applications Web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 573.5.1 Travailler avec des flux HTML . . . . . . . . . . . . . . . . . . . . . . . . . . 57

Page 4: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

3Table des matières

3.5.2 Travailler avec le protocole HTTP . . . . . . . . . . . . . . . . . . . . . . . 583.6 Réalisation d’interfaces graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

3.6.1 Ponts vers C ou autres bibliothèques de référence . . . . . . . . . . 583.6.2 Utilisation de bibliothèques Java . . . . . . . . . . . . . . . . . . . . . . . . 58

3.7 Piles incluses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 58

Chapitre 1.2Présentation de Python

1. Philosophie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 591.1 Python en quelques lignes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 59

1.1.1 D’où vient le nom « Python » ? . . . . . . . . . . . . . . . . . . . . . . . . . . 591.1.2 Présentation technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601.1.3 Présentation conceptuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 60

1.2 Comparaison avec d’autres langages . . . . . . . . . . . . . . . . . . . . . . . . . . . 601.2.1 Shell . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 601.2.2 Perl . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611.2.3 C, C++ . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 611.2.4 Java . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631.2.5 PHP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

1.3 Grands principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651.3.1 Le zen de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 651.3.2 Le développeur n’est pas stupide . . . . . . . . . . . . . . . . . . . . . . . . 661.3.3 Documentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671.3.4 Python est livré piles incluses . . . . . . . . . . . . . . . . . . . . . . . . . . . 671.3.5 Duck Typing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671.3.6 Notion de code pythonique . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

2. Gouvernance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.1 Développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

2.1.1 Branches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 682.1.2 Communauté. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 69

2.2 Mode de gouvernance. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.2.1 Créateur du langage. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.2.2 PEP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 702.2.3 Prise de décisions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 70

Page 5: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

4Les fondamentaux du langage

Python

3. Que contient Python ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.1 Une grammaire et une syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.2 Une bibliothèque standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.3 Des bibliothèques tierces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 713.4 Des frameworks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 72

4. Phases d’exécution d’un programme Python . . . . . . . . . . . . . . . . . . . . . . . . . 724.1 Chargement de la machine virtuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . 724.2 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 724.3 Interprétation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734.4 Problématique de la compilation à la volée . . . . . . . . . . . . . . . . . . . . . . 73

Chapitre 1.3Pourquoi choisir Python

1. Qualités du langage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751.1 Couverture fonctionnelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 751.2 Ticket d’entrée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 761.3 Garanties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

2. Diffusion. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782.1 Entreprises . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 782.2 Le monde de la recherche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 792.3 Le monde de l’éducation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 802.4 Communauté . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 81

3. Références. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823.1 Poids lourds de l’industrie informatique . . . . . . . . . . . . . . . . . . . . . . . . 82

3.1.1 Google . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823.1.2 Mozilla . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 823.1.3 Microsoft . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.1.4 Canonical . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833.1.5 Cisco . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

3.2 Entreprises innovantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.2.1 Services de stockage en ligne . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.2.2 Informatique dématérialisée . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.2.3 Forge . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 843.2.4 Réseaux sociaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

Page 6: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

5Table des matières

3.3 Éditeurs de contenus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.3.1 Disney Animation Studio . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.3.2 Youtube . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.3.3 Box ADSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 853.3.4 Spotify . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

3.4 Éditeurs de logiciels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85

4. Retours d’expérience . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.1 Ressentis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 864.2 Développement dans un contexte hétérogène . . . . . . . . . . . . . . . . . . . 874.3 Développement rapide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 874.4 Vendre des développements Python . . . . . . . . . . . . . . . . . . . . . . . . . . . 884.5 Naviguer dans l’inconnu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 88

Chapitre 1.4Installer son environnement de développement

1. Installer Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891.1 Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 891.2 Mac OS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921.3 UNIX / Linux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 921.4 Compilation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 93

2. Installer des bibliothèques externes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 932.1 Installateur ou gestionnaire de paquets . . . . . . . . . . . . . . . . . . . . . . . . 932.2 Setuptools et PIP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 94

3. Installer un IDE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953.1 Console et outils associés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953.2 Eclipse + pydev. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953.3 Eric . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 953.4 Autres solutions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 96

4. Implémentations de Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964.1 CPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964.2 PyPy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964.3 Jython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964.4 IronPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 964.5 StacklessPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 974.6 Environnement hétérogène . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

Page 7: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

6Les fondamentaux du langage

Python

5. Utilisation de la console . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975.1 Console standard. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 975.2 iPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

6. Distribuer ses propres applications. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986.1 Utilitaire de distribution. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 986.2 Création de paquets distribuables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996.3 Distribution binaire pour Windows . . . . . . . . . . . . . . . . . . . . . . . . . . . 996.4 Distribution binaire pour Mac . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 996.5 Distribution binaire toute plateforme . . . . . . . . . . . . . . . . . . . . . . . . . . 996.6 Distribution spécifique à un environnement . . . . . . . . . . . . . . . . . . . 100

Partie 2 : Les fondamentaux du langage

Chapitre 2.1Algorithmique de base

1. Délimiteurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011.1 Ligne de code . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1011.2 Opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1021.3 Symboles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1041.4 Mots-clés . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071.5 Indentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1071.6 Utilisation du caractère souligné . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081.7 PEP-8 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1081.8 PEP-7 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1091.9 PEP-257 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

2. Instructions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092.1 Définitions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

2.1.1 Fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1092.1.2 Classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102.1.3 Instruction vide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1102.1.4 Suppression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1112.1.5 Renvoyer le résultat de la fonction . . . . . . . . . . . . . . . . . . . . . . 111

2.2 Instructions conditionnelles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132.2.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132.2.2 Condition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132.2.3 Instruction not . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113

Page 8: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

7Table des matières

2.2.4 Instruction if . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1132.2.5 Instruction elif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142.2.6 Instruction else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1142.2.7 Instruction switch . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162.2.8 Interruptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1162.2.9 Approfondissement des conditions . . . . . . . . . . . . . . . . . . . . . 1162.2.10 Performances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 117

2.3 Itérations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182.3.1 Instruction for . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1182.3.2 Instruction while . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1192.3.3 Instruction break . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1202.3.4 Instruction return . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1212.3.5 Instruction continue . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222.3.6 Instruction else . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1222.3.7 Générateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 123

2.4 Constructions fonctionnelles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1252.4.1 Générateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1252.4.2 Compréhensions de listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1252.4.3 Compréhensions d’ensembles. . . . . . . . . . . . . . . . . . . . . . . . . . 1252.4.4 Compréhensions de dictionnaires. . . . . . . . . . . . . . . . . . . . . . . 125

2.5 Gestion des exceptions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262.5.1 Présentation rapide des exceptions. . . . . . . . . . . . . . . . . . . . . . 1262.5.2 Lever une exception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1262.5.3 Capturer une exception. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1272.5.4 Effectuer un traitement de l’exception . . . . . . . . . . . . . . . . . . 1282.5.5 Gérer la sortie de la boucle de capture . . . . . . . . . . . . . . . . . . . 1292.5.6 Gérer le non-déclenchement d’exceptions . . . . . . . . . . . . . . . . 1302.5.7 Prise et libération de ressources . . . . . . . . . . . . . . . . . . . . . . . . 1322.5.8 Assertions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

2.6 Divers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342.6.1 Gérer des imports. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1342.6.2 Traverser les espaces de nommage . . . . . . . . . . . . . . . . . . . . . . 1352.6.3 Fonctions lambda . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1372.6.4 Instructions eval et exec . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 137

Page 9: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

8Les fondamentaux du langage

Python

Chapitre 2.2Déclarations

1. Variable. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391.1 Qu’est-ce qu’une variable ?. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 139

1.1.1 Contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391.1.2 Contenant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1391.1.3 Modes de modification d’une variable . . . . . . . . . . . . . . . . . . . 141

1.2 Typage dynamique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441.2.1 Affectation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1441.2.2 Primitive type et nature du type. . . . . . . . . . . . . . . . . . . . . . . . 1441.2.3 Caractéristiques du typage Python. . . . . . . . . . . . . . . . . . . . . . 145

1.3 Visibilité. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1471.3.1 Espace global. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1471.3.2 Notion de bloc . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 148

2. Fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522.2 Paramètres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 153

2.2.1 Signature d’une fonction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1532.2.2 Notion d’argument ou de paramètre . . . . . . . . . . . . . . . . . . . . 1542.2.3 Valeur par défaut . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1542.2.4 Paramètres nommés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1562.2.5 Déclaration de paramètres extensibles . . . . . . . . . . . . . . . . . . . 1572.2.6 Passage de paramètres étoilés . . . . . . . . . . . . . . . . . . . . . . . . . . 1582.2.7 Signature universelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1592.2.8 Obliger un paramètre à être nommé (keyword-only) . . . . . . . 1602.2.9 Annotations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

3. Classe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1653.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 165

3.1.1 Signature. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1653.1.2 Attribut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663.1.3 Méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1663.1.4 Bloc local. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 167

3.2 Instanciation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1673.2.1 Syntaxe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1673.2.2 Relation entre l’instance et la classe . . . . . . . . . . . . . . . . . . . . . 168

Page 10: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

9Table des matières

4. Module . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694.2 Instructions spécifiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1694.3 Comment appréhender le contenu d’un module ? . . . . . . . . . . . . . . . 170

Chapitre 2.3Modèle objet

1. Tout est objet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1711.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 171

1.1.1 Quel sens donner à « objet » ? . . . . . . . . . . . . . . . . . . . . . . . . . . 1711.1.2 Adaptation du modèle objet dans Python . . . . . . . . . . . . . . . . 172

1.2 Classes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1731.2.1 Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1731.2.2 Déclaration impérative d’une classe . . . . . . . . . . . . . . . . . . . . . 1741.2.3 Instance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1741.2.4 Objet courant. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1761.2.5 Déclaration par prototype d’une classe . . . . . . . . . . . . . . . . . . 176

1.3 Méthodes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1781.3.1 Déclaration. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1781.3.2 Appel de méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1801.3.3 Méthodes et attributs spéciaux . . . . . . . . . . . . . . . . . . . . . . . . 183

1.4 Héritage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1861.4.1 Polymorphisme par sous-typage. . . . . . . . . . . . . . . . . . . . . . . . 1861.4.2 Surcharge de méthode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1871.4.3 Surcharge des opérateurs. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1881.4.4 Polymorphisme paramétrique. . . . . . . . . . . . . . . . . . . . . . . . . . 1891.4.5 Héritage multiple. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

2. Autres outils de la programmation objet . . . . . . . . . . . . . . . . . . . . . . . . . . . 1922.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1922.2 Interfaces . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1932.3 Attributs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1952.4 Propriétés. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1982.5 Emplacements. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2012.6 Métaclasses . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2022.7 Classes abstraites . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 204

Page 11: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

10Les fondamentaux du langage

Python

2.8 La Zope Component Architecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2082.8.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2082.8.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2082.8.3 Définir une interface et un composant. . . . . . . . . . . . . . . . . . . 2092.8.4 Autres fonctionnalités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2102.8.5 Avantages de la ZCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 210

3. Fonctions spéciales et primitives associées. . . . . . . . . . . . . . . . . . . . . . . . . . 2113.1 Personnalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 211

3.1.1 Classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2113.1.2 Singleton. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2133.1.3 Instances. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2133.1.4 Comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2143.1.5 Évaluation booléenne. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2143.1.6 Relations d’héritage ou de classe à instance . . . . . . . . . . . . . . . 215

3.2 Classes particulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2163.2.1 Itérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2163.2.2 Conteneurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2173.2.3 Instances assimilables à des fonctions . . . . . . . . . . . . . . . . . . . 2183.2.4 Ressources à protéger. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2193.2.5 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 220

Chapitre 2.4Types de données et algorithmes appliqués

1. Nombres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2211.1 Types . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 221

1.1.1 Entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2211.1.2 Réels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2221.1.3 Socle commun aux nombres entiers et réels . . . . . . . . . . . . . . 2231.1.4 Méthodes dédiées aux nombres entiers . . . . . . . . . . . . . . . . . . 2241.1.5 Méthodes dédiées aux nombres réels . . . . . . . . . . . . . . . . . . . . 2251.1.6 Complexes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 225

1.2 La console Python, la calculatrice par excellence . . . . . . . . . . . . . . . . 2271.2.1 Opérateurs mathématiques binaires. . . . . . . . . . . . . . . . . . . . . 2271.2.2 Opérateurs binaires particuliers . . . . . . . . . . . . . . . . . . . . . . . . 2281.2.3 Opérateurs mathématiques unaires . . . . . . . . . . . . . . . . . . . . . 229

Page 12: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

11Table des matières

1.2.4 Arrondis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2301.2.5 Opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . 2331.2.6 Opérations mathématiques n-aires . . . . . . . . . . . . . . . . . . . . . 2341.2.7 Fonctions mathématiques usuelles. . . . . . . . . . . . . . . . . . . . . . 235

1.3 Représentations d'un nombre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2411.3.1 Représentation décimale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2411.3.2 Représentation par un exposant. . . . . . . . . . . . . . . . . . . . . . . . 2411.3.3 Représentation par une fraction . . . . . . . . . . . . . . . . . . . . . . . . 2411.3.4 Représentation hexadécimale . . . . . . . . . . . . . . . . . . . . . . . . . . 2421.3.5 Représentation octale . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2441.3.6 Représentation binaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2441.3.7 Opérations binaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2441.3.8 Longueur de la représentation mémoire d'un entier . . . . . . . . 246

1.4 Conversions . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2481.4.1 Conversion entre entiers et réels . . . . . . . . . . . . . . . . . . . . . . . 2481.4.2 Conversion entre réels et complexes . . . . . . . . . . . . . . . . . . . . 2481.4.3 Conversion vers un booléen . . . . . . . . . . . . . . . . . . . . . . . . . . . 249

1.5 Travailler avec des variables . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2501.5.1 Un nombre est non mutable. . . . . . . . . . . . . . . . . . . . . . . . . . . 2501.5.2 Modifier la valeur d'une variable . . . . . . . . . . . . . . . . . . . . . . . 2511.5.3 Opérateurs d'incrémentation . . . . . . . . . . . . . . . . . . . . . . . . . . 251

1.6 Calcul scientifique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2531.6.1 Le calcul scientifique, pour quoi faire ? . . . . . . . . . . . . . . . . . . 2531.6.2 Python, une alternative libre et crédible . . . . . . . . . . . . . . . . . 2531.6.3 Quelques bibliothèques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2541.6.4 Quelques projets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 254

2. Séquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2552.1 Présentation des différents types de séquences . . . . . . . . . . . . . . . . . 255

2.1.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2552.1.2 Les listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2562.1.3 Les n-uplets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2572.1.4 Conversion entre listes et n-uplets . . . . . . . . . . . . . . . . . . . . . 2592.1.5 Socle commun entre liste et n-uplet . . . . . . . . . . . . . . . . . . . . 2592.1.6 Notion d’itérateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 261

2.2 Utilisation des indices et des tranches. . . . . . . . . . . . . . . . . . . . . . . . . 2632.2.1 Définition de l’indice d’un objet et des occurrences . . . . . . . . 2632.2.2 Utiliser l’indice pour adresser la séquence . . . . . . . . . . . . . . . . 264

Page 13: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

12Les fondamentaux du langage

Python

2.2.3 Retrouver les occurrences d’un objet et leurs indices . . . . . . . 2652.2.4 Taille d’une liste, comptage d’occurrences . . . . . . . . . . . . . . . . 2672.2.5 Utiliser l’indice pour modifier ou supprimer . . . . . . . . . . . . . . 2682.2.6 Itération simple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2702.2.7 Présentation de la notion de tranches (slices) . . . . . . . . . . . . . 2742.2.8 Cas particulier de la branche 2.x de Python . . . . . . . . . . . . . . . 2832.2.9 Utilisation basique des tranches . . . . . . . . . . . . . . . . . . . . . . . . 2842.2.10 Utilisation avancée des tranches. . . . . . . . . . . . . . . . . . . . . . . . 286

2.3 Utilisation des opérateurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2882.3.1 Opérateur + . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2882.3.2 Opérateur *. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2892.3.3 Opérateur += . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2922.3.4 Opérateur *= . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2932.3.5 Opérateur in . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2942.3.6 Opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . 295

2.4 Méthodes de modifications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2972.4.1 Ajouter des éléments dans une liste et un n-uplet . . . . . . . . . 2972.4.2 Supprimer un objet d’une liste et d’un n-uplet . . . . . . . . . . . . 2992.4.3 Solutions de contournement pour la modification

de n-uplets . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3032.4.4 Renverser une liste ou un tuple. . . . . . . . . . . . . . . . . . . . . . . . . 3042.4.5 Trier une liste . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

2.5 Utilisation avancée des listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3082.5.1 Opérations d'ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3082.5.2 Pivoter une séquence . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3092.5.3 Itérer correctement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3102.5.4 Programmation fonctionnelle . . . . . . . . . . . . . . . . . . . . . . . . . 3122.5.5 Compréhensions de listes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3142.5.6 Itérations avancées . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3152.5.7 Combinatoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 320

2.6 Adapter les listes à des besoins spécifiques . . . . . . . . . . . . . . . . . . . . . 3232.6.1 Liste d'entiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3232.6.2 Présentation du type array . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3252.6.3 Utiliser une liste comme pile . . . . . . . . . . . . . . . . . . . . . . . . . . 3272.6.4 Utiliser une liste comme file d'attente . . . . . . . . . . . . . . . . . . . 3272.6.5 Utiliser des listes pour représenter des matrices . . . . . . . . . . . 3292.6.6 Liste sans doublons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 330

Page 14: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

13Table des matières

3. Ensembles. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3333.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 333

3.1.1 Définition d’un ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3333.1.2 Différences entre set et frozenset . . . . . . . . . . . . . . . . . . . . . . . 3343.1.3 Utilisation pour dédoublonner des listes . . . . . . . . . . . . . . . . . 3353.1.4 Rajouter une relation d’ordre . . . . . . . . . . . . . . . . . . . . . . . . . . 335

3.2 Opérations ensemblistes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3363.2.1 Opérateurs pour un ensemble à partir de deux autres . . . . . . 3363.2.2 Opérateurs pour modifier un ensemble à partir d’un autre . . 3373.2.3 Méthodes équivalentes à la création

ou modification ensembliste. . . . . . . . . . . . . . . . . . . . . . . . . . . 3383.2.4 Méthodes de comparaison des ensembles . . . . . . . . . . . . . . . . 3393.2.5 Exemples non classiques d’utilisation . . . . . . . . . . . . . . . . . . . 340

3.3 Méthodes de modification d’un ensemble . . . . . . . . . . . . . . . . . . . . . 3433.3.1 Ajouter un élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3433.3.2 Supprimer un élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3443.3.3 Vider un ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3453.3.4 Dupliquer un élément . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3453.3.5 Sortir une valeur d’un ensemble . . . . . . . . . . . . . . . . . . . . . . . 3463.3.6 Utiliser un ensemble comme un recycleur d’objets. . . . . . . . . 3473.3.7 Algorithmique avancée : résolution du problème

des n-dames . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 350

4. Chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3524.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 352

4.1.1 Définition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3524.1.2 Vocabulaire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3534.1.3 Spécificités de la branche 2.x . . . . . . . . . . . . . . . . . . . . . . . . . . 3544.1.4 Changements apportés par la branche 3.x . . . . . . . . . . . . . . . . 3564.1.5 Chaîne de caractères en tant que séquence de caractères . . . . 3584.1.6 Caractères. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3604.1.7 Opérateurs de comparaison . . . . . . . . . . . . . . . . . . . . . . . . . . . 362

4.2 Formatage de chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . 3644.2.1 Opérateur modulo . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3644.2.2 Méthodes de formatage sur l’ensemble de la chaîne . . . . . . . . 3704.2.3 Nouvelle méthode de formatage des variables

dans une chaîne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 373

Page 15: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

14Les fondamentaux du langage

Python

4.3 Opérations d'ensemble . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3774.3.1 Séquençage de chaînes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3774.3.2 Opérations sur la casse . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3794.3.3 Recherche sur une chaîne de caractères . . . . . . . . . . . . . . . . . . 3804.3.4 Informations sur les caractères . . . . . . . . . . . . . . . . . . . . . . . . . 381

4.4 Problématiques relatives à l'encodage . . . . . . . . . . . . . . . . . . . . . . . . . 3834.4.1 Encodage par défaut. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3834.4.2 Encodage du système. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3834.4.3 L'unicode, référence absolue . . . . . . . . . . . . . . . . . . . . . . . . . . . 3834.4.4 Autres encodages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3854.4.5 Ponts entre l'unicode et le reste du monde. . . . . . . . . . . . . . . . 3854.4.6 Revenir vers l'unicode . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 387

4.5 Manipulations de bas niveau avancées . . . . . . . . . . . . . . . . . . . . . . . . 3874.5.1 Opérations de comptage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3874.5.2 Une chaîne de caractères vue comme une liste . . . . . . . . . . . . 3894.5.3 Une chaîne de caractères vue comme un ensemble

de caractères . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3894.6 Représentation mémoire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 390

4.6.1 Présentation du type bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3904.6.2 Lien avec les chaînes de caractères . . . . . . . . . . . . . . . . . . . . . . 3914.6.3 Présentation du type bytearray. . . . . . . . . . . . . . . . . . . . . . . . . 3924.6.4 Gestion d’un jeu de caractères. . . . . . . . . . . . . . . . . . . . . . . . . . 394

5. Dictionnaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4005.1 Présentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 400

5.1.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4005.1.2 Évolutions et différences entre les branches 2.x et 3.x . . . . . . 4015.1.3 Vues de dictionnaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4025.1.4 Instanciation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4045.1.5 Compréhension de dictionnaire . . . . . . . . . . . . . . . . . . . . . . . . 405

5.2 Manipuler un dictionnaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4065.2.1 Récupérer une valeur d’un dictionnaire . . . . . . . . . . . . . . . . . . 4065.2.2 Modifier les valeurs d’un dictionnaire . . . . . . . . . . . . . . . . . . . 4075.2.3 Supprimer une entrée d’un dictionnaire. . . . . . . . . . . . . . . . . . 4085.2.4 Dupliquer un dictionnaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4085.2.5 Utiliser le dictionnaire comme agrégateur de données . . . . . . 4095.2.6 Méthodes d’itération . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 410

Page 16: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

15Table des matières

5.3 Utilisation avancée des dictionnaires . . . . . . . . . . . . . . . . . . . . . . . . . 4105.3.1 Rajouter une relation d'ordre . . . . . . . . . . . . . . . . . . . . . . . . . . 4105.3.2 Algorithmique classique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4145.3.3 Adapter les dictionnaires à des besoins spécifiques . . . . . . . . . 4165.3.4 Représentation universelle de données . . . . . . . . . . . . . . . . . . 417

6. Booléens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4186.1 Le type booléen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 418

6.1.1 Classe bool . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4186.1.2 Les deux objets True et False . . . . . . . . . . . . . . . . . . . . . . . . . . 4196.1.3 Différence entre l’opérateur d’égalité et d'identité . . . . . . . . . 419

6.2 Évaluation booléenne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4196.2.1 Méthode générique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4196.2.2 Objets classiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

7. Données temporelles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4207.1 Gérer une date calendaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 420

7.1.1 Notion de date calendaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4207.1.2 Travailler sur une date. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4217.1.3 Considérations astronomiques . . . . . . . . . . . . . . . . . . . . . . . . . 4227.1.4 Considérations historiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4227.1.5 Considérations techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4237.1.6 Représentation textuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 424

7.2 Gérer un horaire ou un moment d’une journée . . . . . . . . . . . . . . . . . 4257.2.1 Notion d’instant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4257.2.2 Notion de fuseau horaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4277.2.3 Représentation textuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 427

7.3 Gérer un instant absolu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4287.3.1 Notion d’instant absolu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4287.3.2 Rapport avec les notions précédentes. . . . . . . . . . . . . . . . . . . . 4297.3.3 Représentation textuelle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4317.3.4 Gestion des fuseaux horaires. . . . . . . . . . . . . . . . . . . . . . . . . . . 4317.3.5 Créer une date à partir d’une représentation textuelle . . . . . . 432

7.4 Gérer une différence entre deux dates ou instants . . . . . . . . . . . . . . . 4327.4.1 Notion de différence et de résolution . . . . . . . . . . . . . . . . . . . . 4327.4.2 Considérations techniques . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4337.4.3 Utilisation avec des dates calendaires . . . . . . . . . . . . . . . . . . . 4347.4.4 Utilisation avec des horaires . . . . . . . . . . . . . . . . . . . . . . . . . . . 4357.4.5 Utilisation avec des dates absolues. . . . . . . . . . . . . . . . . . . . . . 435

Page 17: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

16Les fondamentaux du langage

Python

7.4.6 La seconde comme unité de base . . . . . . . . . . . . . . . . . . . . . . . 4357.5 Spécificités des fuseaux horaires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4357.6 Problématiques de bas niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 437

7.6.1 Timestamp et struct_time . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4377.6.2 Mesures de performances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 438

7.7 Utilisation du calendrier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4407.7.1 Présentation du module calendar . . . . . . . . . . . . . . . . . . . . . . . 4407.7.2 Fonctions essentielles du calendrier . . . . . . . . . . . . . . . . . . . . . 445

Chapitre 2.5Motifs de conception

1. Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4471.1 Positionnement par rapport à la notion d’objet . . . . . . . . . . . . . . . . . 4471.2 Organisation du chapitre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4481.3 Positionnement par rapport à d’autres concepts . . . . . . . . . . . . . . . . 449

2. Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4492.1 Singleton . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4492.2 Fabrique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 449

2.2.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4492.2.2 Solutions. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4502.2.3 Conséquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 452

2.3 Fabrique abstraite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4532.3.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4532.3.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 453

2.4 Monteur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4532.4.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4532.4.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4542.4.3 Conséquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 456

2.5 Prototype . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4562.5.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4562.5.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4572.5.3 Conséquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459

3. Structuration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4593.1 Adaptateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 459

3.1.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 459

Page 18: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

17Table des matières

3.1.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4593.1.3 Conséquences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 461

3.2 Pont . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4623.2.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4623.2.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4633.2.3 Conséquences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 466

3.3 Composite . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4663.3.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4663.3.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4663.3.3 Conséquences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 468

3.4 Décorateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4683.4.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4683.4.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4693.4.3 Conséquences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 471

3.5 Façade . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4713.5.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4713.5.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4713.5.3 Conséquences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 473

3.6 Poids-mouche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4733.6.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4733.6.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4743.6.3 Conséquences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475

3.7 Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4753.7.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4753.7.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4753.7.3 Conséquences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

4. Comportement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4774.1 Chaîne de responsabilité . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 477

4.1.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4774.1.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4784.1.3 Conséquences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 478

4.2 Commande . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4794.2.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4794.2.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4794.2.3 Conséquences. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 480

4.3 Itérateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4814.3.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 481

Page 19: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

18Les fondamentaux du langage

Python

4.3.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4814.3.3 Conséquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 483

4.4 Mémento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4834.4.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4834.4.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4844.4.3 Conséquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485

4.5 Visiteur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4854.5.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4854.5.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4854.5.3 Conséquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 486

4.6 Observateur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4864.6.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4864.6.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4864.6.3 Conséquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 487

4.7 Stratégie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4874.7.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4874.7.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4874.7.3 Conséquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 488

4.8 Fonction de rappel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4884.8.1 Présentation de la problématique . . . . . . . . . . . . . . . . . . . . . . . 4884.8.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4894.8.3 Conséquences . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 489

5. ZCA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4905.1 Rappels. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4905.2 Adaptateur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 490

5.2.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4905.2.2 Utilisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 491

5.3 Utilitaire . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4925.3.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4925.3.2 Utilisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 493

5.4 Fabrique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4935.4.1 Déclaration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4935.4.2 Utilisation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494

5.5 Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 494

Page 20: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

19Table des matières

Partie 3 : Les fonctionnalités

Chapitre 3.1Manipulation de données

1. Bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4951.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4951.2 Accès à une base de données relationnelle . . . . . . . . . . . . . . . . . . . . . 496

1.2.1 Point d’entrée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4961.2.2 MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4961.2.3 PostgreSQL. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5011.2.4 SQLite. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5041.2.5 Oracle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 504

1.3 Utilisation d’un ORM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5051.3.1 Qu’est-ce qu’un ORM ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5051.3.2 ORM proposés par Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5051.3.3 SQLAlchemy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 506

1.4 Autres bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5131.4.1 CSV. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5131.4.2 NoSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5201.4.3 Base de données orientée objet : ZODB . . . . . . . . . . . . . . . . . . 5201.4.4 Base de données de type clé-valeur : REDIS, Cassandra . . . . . 5261.4.5 Bases de données orientées documents :

CouchDB et MongoDB . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5281.4.6 Bases de données natives XML : XSDB, BaseX . . . . . . . . . . . . 529

2. LDAP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5302.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 530

2.1.1 Protocole. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5302.1.2 Serveurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5302.1.3 Terminologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 531

2.2 Se connecter et s’authentifier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5312.3 Mode synchrone, mode asynchrone . . . . . . . . . . . . . . . . . . . . . . . . . . 5332.4 Rechercher des données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 534

3. XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5363.1 XML et les technologies qui gravitent autour . . . . . . . . . . . . . . . . . . 536

3.1.1 Définition de XML, terminologie associée . . . . . . . . . . . . . . . . 5363.1.2 Notion de schéma . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 537

Page 21: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

20Les fondamentaux du langage

Python

3.1.3 Avantages et inconvénients de XML . . . . . . . . . . . . . . . . . . . . 5383.1.4 Différentes manières de parcourir un fichier XML . . . . . . . . . 5403.1.5 Modules Python dédiés au XML . . . . . . . . . . . . . . . . . . . . . . . . 540

3.2 Valider un document XML. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5413.2.1 Document XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5413.2.2 Schéma DTD . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5423.2.3 Schéma XSD. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5423.2.4 Schéma RNG (RelaxNG) . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5433.2.5 Schematron . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 544

3.3 DOM . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5443.3.1 Lecture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5443.3.2 Écriture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 546

3.4 SAX . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5473.4.1 Support de SAX dans lxml . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5473.4.2 API SAX Allégée . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 548

3.5 XPath . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5493.6 XSLT . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5523.7 Cas spécifiques des fichiers HTML . . . . . . . . . . . . . . . . . . . . . . . . . . . 553

3.7.1 Problématique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5533.7.2 Parser un fichier HTML à la façon DOM. . . . . . . . . . . . . . . . . 5533.7.3 Parser un fichier HTML à la façon SAX . . . . . . . . . . . . . . . . . . 555

4. Outils de manipulation de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5574.1 Encrypter une donnée. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 557

4.1.1 Fonctions de hashage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5574.1.2 Code d’authentification de message . . . . . . . . . . . . . . . . . . . . . 5594.1.3 Stéganographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 560

4.2 Générer des nombres aléatoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5644.3 Expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 565

5. Travailler avec des médias . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5705.1 Images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 570

5.1.1 Représentation informatique d’une image. . . . . . . . . . . . . . . . 5705.1.2 Présentation de PIL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5715.1.3 Formats d’images matricielles . . . . . . . . . . . . . . . . . . . . . . . . . . 5725.1.4 Récupérer des informations d’une image . . . . . . . . . . . . . . . . . 5745.1.5 Opérations d’ensemble sur une image . . . . . . . . . . . . . . . . . . . 5755.1.6 Travailler avec les calques ou les pixels . . . . . . . . . . . . . . . . . . 578

Page 22: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

21Table des matières

5.2 Sons . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5805.2.1 Représentation informatique du son . . . . . . . . . . . . . . . . . . . . 5805.2.2 Installation de pymedia. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5825.2.3 Wav. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5835.2.4 MP3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5845.2.5 Ogg Vorbis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5855.2.6 Mutagen . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586

5.3 Vidéos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5885.3.1 AVI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5885.3.2 MPEG2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5885.3.3 DivX ou Xvid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5885.3.4 PyMedia . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 589

Chapitre 3.2Génération de contenu

1. PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5951.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 595

1.1.1 Format PDF . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5951.1.2 Avantages . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5951.1.3 Inconvénients. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5961.1.4 Présentation de la bibliothèque libre . . . . . . . . . . . . . . . . . . . . 596

1.2 Bas niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5961.2.1 Bibliothèque de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5961.2.2 Canvas . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 598

1.3 Haut niveau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6001.3.1 Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6001.3.2 Flux de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6021.3.3 Création d’un visuel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6041.3.4 Template de page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6051.3.5 Page contenant plusieurs zones . . . . . . . . . . . . . . . . . . . . . . . . 606

2. OpenDocument . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6092.1 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6092.2 openDocument Texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609

2.2.1 Hello World . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6092.2.2 Styles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 609

Page 23: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

22Les fondamentaux du langage

Python

2.2.3 Tableau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6112.3 openDocument Tableur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 612

2.3.1 Principes généraux par rapport au texte . . . . . . . . . . . . . . . . . . 6122.3.2 Particularités. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6132.3.3 Aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 613

2.4 openDocument Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6132.4.1 Principes généraux par rapport au texte et au tableur. . . . . . . 6132.4.2 Mise en page. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6142.4.3 Créer une page . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 615

Chapitre 3.3Programmation parallèle

1. Terminologie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6171.1 Processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6171.2 Tâche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618

2. Utilisation d’une tâche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6182.1 Gestion d’une tâche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 618

2.1.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6182.1.2 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 619

2.2 Gestion de plusieurs tâches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6222.2.1 Lancement et contrôle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6222.2.2 Opportunité d’utiliser une tâche . . . . . . . . . . . . . . . . . . . . . . . 624

2.3 Résolution des problématiques liées . . . . . . . . . . . . . . . . . . . . . . . . . . 6262.3.1 Synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6262.3.2 Synchronisation conditionnelle . . . . . . . . . . . . . . . . . . . . . . . . 6292.3.3 Sémaphore . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 631

3. Utilisation de processus. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6333.1 Gestion d’un processus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 633

3.1.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6333.1.2 Création . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 634

3.2 Gestion de plusieurs tâches . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6363.2.1 Synchronisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6363.2.2 Paralléliser un travail . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 637

3.3 Résolution des problématiques liées . . . . . . . . . . . . . . . . . . . . . . . . . . 6403.3.1 Communication inter-processus. . . . . . . . . . . . . . . . . . . . . . . . 640

Page 24: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

23Table des matières

3.3.2 Partage de données entre processus . . . . . . . . . . . . . . . . . . . . . 6413.4 Opportunité d’utiliser les processus . . . . . . . . . . . . . . . . . . . . . . . . . . 6423.5 Démon. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 642

4. Exécution asynchrone . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6444.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6444.2 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 646

Chapitre 3.4Programmation système et réseau

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6531.1 Définition . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6531.2 Objectifs du chapitre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 654

2. Écrire des scripts système . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6542.1 Appréhender son système d’exploitation . . . . . . . . . . . . . . . . . . . . . . 654

2.1.1 Avertissement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6542.1.2 Système d’exploitation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6542.1.3 Processus courant . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6552.1.4 Utilisateurs et groupes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6562.1.5 Constantes pour le système de fichiers . . . . . . . . . . . . . . . . . . 658

2.2 Gestion d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6592.2.1 Ouvrir un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6592.2.2 Lire un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6602.2.3 Écrire un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6612.2.4 Changer les droits d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . 6622.2.5 Changer de propriétaire ou de groupe . . . . . . . . . . . . . . . . . . . 6642.2.6 Récupérer des informations sur un fichier . . . . . . . . . . . . . . . . 6652.2.7 Supprimer un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 665

2.3 Alternatives simples à des commandes bash usuelles . . . . . . . . . . . . 6662.3.1 Répertoires . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6662.3.2 Fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6682.3.3 Module de haut niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6692.3.4 Recherche d’un fichier . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 671

2.4 Exécuter des commandes externes . . . . . . . . . . . . . . . . . . . . . . . . . . . 6722.4.1 Exécuter et afficher le résultat . . . . . . . . . . . . . . . . . . . . . . . . . 6722.4.2 Exécuter et récupérer le résultat . . . . . . . . . . . . . . . . . . . . . . . . 673

Page 25: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

24Les fondamentaux du langage

Python

2.5 Utilitaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6742.5.1 Différentiel entre fichiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6742.5.2 Utilitaire de sauvegarde . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6762.5.3 Lire un fichier de configuration. . . . . . . . . . . . . . . . . . . . . . . . . 6772.5.4 Pickle . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 678

2.6 Compresser et décompresser un fichier . . . . . . . . . . . . . . . . . . . . . . . . 6802.6.1 Tarfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6802.6.2 Gzip. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6832.6.3 Bz2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6832.6.4 Zipfile . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6842.6.5 Interface de haut niveau . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 686

3. Travailler avec des arguments. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6873.1 Présentation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6873.2 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 688

4. Programmation réseau. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6924.1 Écrire un serveur et un client . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 692

4.1.1 Utilisation d’une socket TCP . . . . . . . . . . . . . . . . . . . . . . . . . . 6924.1.2 Utilisation d’une socket UDP . . . . . . . . . . . . . . . . . . . . . . . . . . 6974.1.3 Création d’un serveur TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7014.1.4 Création d’un serveur UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7034.1.5 Un peu plus loin sur le sujet . . . . . . . . . . . . . . . . . . . . . . . . . . . 704

4.2 Utiliser un protocole standard . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7064.2.1 HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7064.2.2 Proxy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7104.2.3 Cookies . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7114.2.4 FTP et SFTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7124.2.5 WEBDAV . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7144.2.6 SSH . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7164.2.7 POP et POPS. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7194.2.8 IMAP et IMAPS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7204.2.9 SMTP et SMPTS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7214.2.10 NNTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7264.2.11 IRC . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 727

4.3 Services web . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7304.3.1 REST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7304.3.2 SOAP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7324.3.3 Pyro . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 733

Page 26: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

25Table des matières

5. Utilisation du matériel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7345.1 Wake-on-LAN . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734

5.1.1 Pré-requis . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7345.1.2 Mise en œuvre . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 734

5.2 Utilisation du port série . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 735

Chapitre 3.5Bonnes pratiques

1. Programmation dirigée par les tests . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7371.1 Tests unitaires. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 737

1.1.1 Principes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7371.1.2 Interprétation. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7381.1.3 Couverture . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7391.1.4 Outils . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 740

1.2 Tests de non-régression . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7421.2.1 Actions de développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7421.2.2 Gestion de la découverte d’une anomalie par une MOA . . . . 742

1.3 Tests fonctionnels . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7431.4 Tests de performance . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7441.5 Intégration continue. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 747

2. Programmation dirigée par la documentation. . . . . . . . . . . . . . . . . . . . . . . 7482.1 Documentation interne . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 748

2.1.1 À destination des développeurs . . . . . . . . . . . . . . . . . . . . . . . . 7482.1.2 À destination des utilisateurs . . . . . . . . . . . . . . . . . . . . . . . . . . 749

2.2 Documentation externe . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7492.2.1 Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7492.2.2 Démarrage rapide. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7502.2.3 Résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 752

3. Optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7533.1 Qualimétrie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7533.2 Outils de débogage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7553.3 Outils de profilage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7563.4 Règles d’optimisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 757

3.4.1 Pourquoi optimiser ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7573.4.2 Règles générales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 758

Page 27: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

26Les fondamentaux du langage

Python

Partie 4 : Mise en pratique

Chapitre 4.1Créer une application web en 30 minutes

1. Description de l’application à construire . . . . . . . . . . . . . . . . . . . . . . . . . . . 761

2. Mise en place . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7622.1 Isolation de l’environnement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7622.2 Création du projet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7632.3 Paramétrage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7632.4 Premiers essais . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 765

3. Réalisation de l’application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7663.1 Modèles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7673.2 Vues . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7733.3 Contrôleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7803.4 Traduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 783

4. Pour aller plus loin . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 785

Chapitre 4.2Créer une application console en 10 minutes

1. Objectif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 787

2. Parseur d’arguments . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 788

3. Création des données. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 790

Chapitre 4.3Créer une application graphique en 20 minutes

1. Objectif. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7931.1 Fonctionnel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 7931.2 Technique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 793

2. Présentation rapide de TkInter et d’astuces. . . . . . . . . . . . . . . . . . . . . . . . . 794

3. Gestionnaire de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 795

4. Création des composants graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 798

Page 28: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

27Table des matières

5. Autres bibliothèques graphiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8055.1 wxPython . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8055.2 PyGTK . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8065.3 PyQt. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8065.4 PySide . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 806

Chapitre 4.4Créer un jeu en 30 minutes avec PyGame

1. Présentation de PyGame . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 807

2. Réalisation d’un jeu Tetris . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8082.1 Présentation du jeu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8082.2 Présentation des problématiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8092.3 Création des constantes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 809

Chapitre 4.5Introduction à Grok en 10 minutes

1. Présentation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8231.1 Zope2. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8231.2 Zope3. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8241.3 Grok . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 825

2. Mise en place . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8252.1 Création de l’environnement virtuel . . . . . . . . . . . . . . . . . . . . . . . . . . 8252.2 Mise en place du projet . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8262.3 Observations . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 826

3. Développement . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8283.1 Objectif . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8283.2 Description du composant principal . . . . . . . . . . . . . . . . . . . . . . . . . . 8283.3 Vue Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8293.4 Vue d’édition. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8303.5 Vue d’ajout de contenu . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 831

4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 832

Page 29: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

28Les fondamentaux du langage

Python

Annexes1. Applications scriptables en Python. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 833

1.1 GIMP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8331.2 Inkscape . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8341.3 Blender . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8351.4 OGRE. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8361.5 Scribus . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8371.6 LibreOffice . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8371.7 KOffice. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8381.8 VLC, Amarok, BlueMindo, Quod Libet . . . . . . . . . . . . . . . . . . . . . . . . 8381.9 Pidgin, Empathy . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8391.10 Firefox, Thunderbird. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 840

2. Table UNICODE . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8412.1 Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841

3. Bytes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8413.1 Script . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8413.2 Résultat . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 841

Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 845

Page 30: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

Editions ENI

Hacking et Forensic Développez vos propres outils

en Python

CollectionEpsilon

Table des matières

Page 31: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

1Table des matières

Avant-propos

Chapitre 1Le réseau

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11

2. Les sockets. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.1 Création d'un socket. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122.2 Échange de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132.3 Les erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 142.4 Socket et FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 172.5 Utilisation de l'UDP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 19

3. Création d'un serveur . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 203.2 Connexion cliente. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 223.3 Discussion avec le client. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 233.4 Création d'un « trojan » basique. . . . . . . . . . . . . . . . . . . . . . . . . . 25

4. DNS : Domain Name Server . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 28

4.1.1 Que signifie DNS ? . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 284.1.2 Principaux enregistrements DNS . . . . . . . . . . . . . . . . . . . 29

4.2 nslookup basique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314.3 Reverse lookup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344.4 La librairie DNS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 354.5 Demande à partir d'un serveur spécifié . . . . . . . . . . . . . . . . . . . . 364.6 Mise en forme des résultats obtenus . . . . . . . . . . . . . . . . . . . . . . 39

Les éléments à télécharger sont disponibles à l'adresse suivante :http://www.editions-eni.fr

Saisissez la référence ENI de l'ouvrage EPHAFO dans la zone de recherche et validez. Cliquez sur le titre du livre puis sur le bouton de téléchargement.

Page 32: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

2Développez vos propres outils en Python

Hacking et Forensic

5. FTP : File Transfer Protocol . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 415.2 FTP anonyme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 425.3 Téléchargement de fichiers ASCII . . . . . . . . . . . . . . . . . . . . . . . . 435.4 Téléchargement de fichiers binaires . . . . . . . . . . . . . . . . . . . . . . 455.5 Téléchargement avancé de fichiers binaires . . . . . . . . . . . . . . . . 455.6 Envoi de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 475.7 Les erreurs FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 485.8 Lister le contenu des répertoires . . . . . . . . . . . . . . . . . . . . . . . . . 495.9 Les autres commandes utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . 515.10 Télécharger récursivement des données . . . . . . . . . . . . . . . . . . . 52

6. Les expressions régulières . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 556.2 Le module re . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 566.3 Les méthodes utiles . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57

6.3.1 La méthode search() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 576.3.2 La méthode match() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 586.3.3 Méthode sub() . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 596.3.4 Aller plus loin avec les groupes . . . . . . . . . . . . . . . . . . . . . 60

6.4 Comment construire son « pattern » ou expression . . . . . . . . . . 61

7. Le Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 627.2 Récupération d'une page source. . . . . . . . . . . . . . . . . . . . . . . . . . 637.3 Méthodes GET et POST. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 64

7.3.1 Méthode GET . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 657.3.2 Méthode POST . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 66

7.4 Gestion des erreurs . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 677.4.1 Erreurs de connexion : urllib2.URLError . . . . . . . . . . . . . 677.4.2 Erreur 404. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 67

7.5 Authentification . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 68

Page 33: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

3Table des matières

8. Analyser les pages HTML et XHTML. . . . . . . . . . . . . . . . . . . . . . . . . 708.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708.2 Première approche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 708.3 Travail sur des pages « réelles » . . . . . . . . . . . . . . . . . . . . . . . . . . 73

8.3.1 Ampersand . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 738.3.2 Caractères spéciaux . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 74

8.4 BeautifulSoup . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768.4.1 Introduction. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 768.4.2 Récupérer les liens . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 77

9. Le XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 799.2 Représentation du fichier XML . . . . . . . . . . . . . . . . . . . . . . . . . . 799.3 Python et XML . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 809.4 Lire un flux RSS . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 84

10. Les e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8510.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8510.2 La bibliothèque smtplib . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 87

10.2.1 Le corps du texte . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8710.2.2 Mail avec pièce jointe . . . . . . . . . . . . . . . . . . . . . . . . . . . . 89

10.3 Analyser des e-mails . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9010.4 Analyser les dates . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9410.5 Erreurs et debugging. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9510.6 Mail et POP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 97

11. Le SSL en Python . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10011.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10011.2 Utilisation d'OpenSSL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10011.3 Vérifier les certificats . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 102

12. Utilisation de bases de données . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10712.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10712.2 MySQLdb . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 108

12.2.1 Rappel. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 10812.2.2 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109

Page 34: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

4Développez vos propres outils en Python

Hacking et Forensic

12.3 PostgreSQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 11412.3.1 Introduction et première connexion . . . . . . . . . . . . . . . 11412.3.2 Exécuter des commandes . . . . . . . . . . . . . . . . . . . . . . . . 11512.3.3 Cacher les changements . . . . . . . . . . . . . . . . . . . . . . . . . 11612.3.4 Répéter des commandes . . . . . . . . . . . . . . . . . . . . . . . . . 11712.3.5 Récupérer des données . . . . . . . . . . . . . . . . . . . . . . . . . . 118

13. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

14. Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12114.1 Cas 1 : Scanner de ports . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 121

14.1.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12114.1.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 122

14.2 Cas 2 : Envoi de mails. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12314.2.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12314.2.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 124

14.3 Cas 3 : Fuzzing de FTP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12914.3.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 12914.3.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 130

14.4 Cas 4 : Parsing de page Web. . . . . . . . . . . . . . . . . . . . . . . . . . . . 13114.4.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13114.4.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 132

14.5 Cas 5 : Brute force MySQL . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13214.5.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 13214.5.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 133

Chapitre 2Réseau : la bibliothèque Scapy

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 135

2. Programmation réseau avec Scapy . . . . . . . . . . . . . . . . . . . . . . . . . . 1372.1 Liste des protocoles supportés . . . . . . . . . . . . . . . . . . . . . . . . . . 1372.2 Quelques notions sur les réseaux. . . . . . . . . . . . . . . . . . . . . . . . 143

2.2.1 Topologie des réseaux . . . . . . . . . . . . . . . . . . . . . . . . . . . 143

Page 35: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

5Table des matières

2.2.2 Les différents types de réseaux . . . . . . . . . . . . . . . . . . . . 1442.2.3 Qu'est-ce qu’un protocole ? . . . . . . . . . . . . . . . . . . . . . . 1442.2.4 Adresse IP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1452.2.5 Les classes. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1462.2.6 Le masque de sous-réseau . . . . . . . . . . . . . . . . . . . . . . . . 1462.2.7 Le modèle OSI . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 147

2.3 Manipulations basiques . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522.3.1 Commandes de base . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1522.3.2 Fabrication de paquets . . . . . . . . . . . . . . . . . . . . . . . . . . 1552.3.3 Les entrées-sorties . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1572.3.4 Entrons dans le détail . . . . . . . . . . . . . . . . . . . . . . . . . . . 161

2.4 Utilisation avancée : sécurité réseau . . . . . . . . . . . . . . . . . . . . . 1692.4.1 Traceroute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1692.4.2 Sniffing. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1752.4.3 Scan TCP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1782.4.4 Tunneling. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 179

2.5 Quelques exemples simples en « one-liner » . . . . . . . . . . . . . . . 1802.5.1 ACK scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1802.5.2 Xmas scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1812.5.3 IP scan . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1832.5.4 Les différents ping . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1832.5.5 Les attaques classiques . . . . . . . . . . . . . . . . . . . . . . . . . . 183

3. Scapy et IPv6. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1843.1 Notion d'IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 184

3.1.1 Généralités . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1843.1.2 IPv6 : RFC 2373 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 185

3.2 Application . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1873.2.1 Requête ICMP IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1873.2.2 Routage de paquets IPv6 . . . . . . . . . . . . . . . . . . . . . . . . . 1873.2.3 Exemple de routage de Header . . . . . . . . . . . . . . . . . . . . 1883.2.4 Traceroute . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1883.2.5 IPv6 NA . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1883.2.6 Avertissement de daemon tués . . . . . . . . . . . . . . . . . . . 189

Page 36: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

6Développez vos propres outils en Python

Hacking et Forensic

3.2.7 Exemple . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 189

4. Conclusion . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

5. Mise en pratique . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1905.1 Canal caché IP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 190

5.1.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1905.1.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 191

5.2 Détection de Rogue AP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1915.2.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1915.2.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 192

5.3 IP Spoofing . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1935.3.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1935.3.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 193

5.4 Spoofing IPv6 des voisins . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1945.4.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 1945.4.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 194

Chapitre 3Débogage sous Windows

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 197

2. Première approche . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 198

3. État des registres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2123.1 Énumération des threads . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2123.2 Récupération des valeurs des registres . . . . . . . . . . . . . . . . . . . 213

4. Les événements du debugger . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 215

5. Les points d’arrêt (breakpoints). . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2265.1 Points d'arrêt logiciel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2265.2 Points d'arrêt matériel . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2285.3 Point d'arrêt mémoire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 230

6. La bibliothèque PyDbg . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2316.1 Violation d’accès des en-têtes (handlers) . . . . . . . . . . . . . . . . . 2336.2 Process Snapshot . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 236

Page 37: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

7Table des matières

7. Applications : Hooking . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2427.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2427.2 Solution . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 242

Chapitre 4Le Fuzzing

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 247

2. Fuzzing FTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 248

3. Fuzzing avec Scapy. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 253

4. Fuzzing avec PyDbg : format string . . . . . . . . . . . . . . . . . . . . . . . . . 2564.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2564.2 Fuzzer de fichiers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 257

5. Sulley . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2635.1 Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2635.2 Installation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 263

5.2.1 Installation normale . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2635.2.2 Installation non standard . . . . . . . . . . . . . . . . . . . . . . . . 266

5.3 Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2755.3.1 Structure du répertoire de Sulley . . . . . . . . . . . . . . . . . . 2755.3.2 Représentation de données . . . . . . . . . . . . . . . . . . . . . . . 2775.3.3 Primitives statiques et aléatoires . . . . . . . . . . . . . . . . . . 2775.3.4 Les entiers. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2785.3.5 Chaînes de caractères et délimiteurs . . . . . . . . . . . . . . . 2795.3.6 Les extensions Fuzz Library . . . . . . . . . . . . . . . . . . . . . . 2805.3.7 Blocks . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2815.3.8 Groupes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2825.3.9 Encodeur. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2835.3.10 Dépendances . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2835.3.11 Blocks Helpers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2845.3.12 Legos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 286

Page 38: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

8Développez vos propres outils en Python

Hacking et Forensic

6. Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2876.1 Fuzzing 1 : HTTP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 287

6.1.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2876.1.2 Exemple de corrigé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 288

6.2 Fuzzing 2 : FTP. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2906.2.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2906.2.2 Exemple de corrigé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 290

Chapitre 5Traitement d'images

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 293

2. Utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2942.1 La classe Image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2942.2 Lire et écrire. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2952.3 Couper, coller et fusionner. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2982.4 Transformations géométriques . . . . . . . . . . . . . . . . . . . . . . . . . 2992.5 Transformation des couleurs . . . . . . . . . . . . . . . . . . . . . . . . . . . 3002.6 Amélioration d'image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 300

2.6.1 Filtres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3002.6.2 Opérations sur les points . . . . . . . . . . . . . . . . . . . . . . . . 3002.6.3 Amélioration . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 301

3. Exemples d'utilisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3023.1 Création d'un captcha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3023.2 Capture d'image et transformation . . . . . . . . . . . . . . . . . . . . . . 3033.3 Lecture de captcha . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

3.3.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3053.3.2 Exemple de corrigé. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 305

Page 39: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

9Table des matières

Chapitre 6Forensic

1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 309

2. Cryptographie et autres . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3102.1 ROT13. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3102.2 Base 64. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3122.3 Hash . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 314

3. Extraction des métadonnées dans les fichiers. . . . . . . . . . . . . . . . . . 3173.1 Métadonnées MP3 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3173.2 Métadonnées des images . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3183.3 Métadonnées PDF. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3193.4 Métadonnées OLE2 . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3203.5 Cas concret . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 321

4. Fichiers ZIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3224.1 Lire dans un fichier ZIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3224.2 Attaque Brute force de mots de passe . . . . . . . . . . . . . . . . . . . . 322

5. Lire dans un fichier OpenOffice ou Word. . . . . . . . . . . . . . . . . . . . . 3235.1 Parcourir une arborescence. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3235.2 Rechercher dans un document OpenOffice . . . . . . . . . . . . . . . 3245.3 Rechercher dans un document Word . . . . . . . . . . . . . . . . . . . . 325

6. E-mail. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3266.1 Retrouver des e-mails dans des fichiers . . . . . . . . . . . . . . . . . . . 3266.2 Rechercher dans la boîte mail . . . . . . . . . . . . . . . . . . . . . . . . . . 327

7. Stéganographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3287.1 Rechercher des informations dans une image . . . . . . . . . . . . . 3287.2 Cacher une image dans une image . . . . . . . . . . . . . . . . . . . . . . 3297.3 Lecture de l'image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 331

8. Volatility . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3318.1 Informations sur l'image . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3328.2 Processus et DLL . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3338.3 Exemple de programme . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 334

Page 40: Python - Decitre.fr : Livres, Ebooks, romans, BD, polars ... · Editions ENI Python Les fondamentaux du langage (Nouvelle édition) Collection Ressources Informatiques Table des matières

10Développez vos propres outils en Python

Hacking et Forensic

9. Applications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3419.1 Décryptage . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 341

9.1.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3419.1.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

9.2 OCR. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3429.2.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3429.2.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 342

9.3 ZIP . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3439.3.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3439.3.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 343

9.4 Scapy et géolocalisation . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3439.4.1 Énoncé . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3439.4.2 Correction . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 344

Bibliographie . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 345Index . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 347