Vous êtes sur la page 1sur 91

11/03/2021

PYTHON
Présenté par Ismael B. TIMITE
Décembre 2019

>>> import this

~ The Zen of Python

1
11/03/2021

PYTHON

§ Besoin de traiter, d’analyser et de visualiser les données


§ Limitations des outils courants (Excel, etc.) aux fonctionnalités de
l’interface
§ Possibilité limitée d’étendre ces fonctionnalités (macros, etc.)

§ Nécessité d’utiliser un langage de programmation

PYTHON

§ Accessible, facile à apprendre, … mais Puissant


§ Excellent choix pour les données

§ Manipulation de larges ensembles de données

§ Fonctions mathématiques intégrées

§ Outils de visualisations
§ Modules, Packages, Frameworks

§ Différentes implémentations :
§ Jython (Java), Iron Python (C# .Net) PyObjc (ObjectiveC), pyJs, cython

2
11/03/2021

INSTALLATION
Python, Anaconda, Editeur de texte, Documentation

INSTALLATION

§ Installation éditeur texte (Atom, SublimeText, etc.)


§ Installation Anaconda

§ Exécution Anaconda

§ Lancement Jupyter Notebook

§ Lancement interpréteur Python


§ Documentation officielle

https://docs.python.org/3.6/index.html

3
11/03/2021

SYNTAXE

§ Code à exécuter depuis la ligne de commande


~ python -V

§ Code Python à exécuter avec un interpréteur Python


>>> print(2019)

§ Illustration de syntaxe
variable = valeur

§ Lien
https://docs.python.org/3/reference/lexical_analysis.html#keywords

INTERPRETEUR

§ Vérifier la version installée depuis la ligne de commande

~ python -V

§ Invoquer un interpréteur depuis la ligne de commande

~ python

4
11/03/2021

EXPRESSION

§ Evaluer
une expression
>>> 9-2

§ Afficher
avec la fonction PRINT
>>> print(2)

§ Evaluer
une expression et la retourner avec PRINT
>>> print(5*6)

JUPYTER NOTEBOOK

§ Environnement de programmation
§ NoteBook (extension .ipynb)
§ Possibilité d’interlacer du texte et du code
§ Exécution des cellules individuellement et dans l’ordre
souhaité
§ Partage des Notebook
§ Idéal pour des expériences, notamment en Data Science
§ Extension à d’autres languages (Julia, Python, R) -> Jupyter

10

10

5
11/03/2021

JUPYTER NOTEBOOK

§ Choix du type de Kernel (définition du langage)


§ Ordre d’exécution des cellules important
§ Possibilité de ré-exécuter des cellules autant de fois que
souhaité

§ Ajout de texte avec la syntaxe MARKDOWN

11

11

OPERATEURS ARITHMETIQUES
Opérateurs arithmétiques, Affectation de variables

12

6
11/03/2021

OPERATEURS ARITHMETIQUES

§ Principaux opérateurs :
§ Addition +
§ Soustraction –
§ Multiplication *
§ Division / et division entière //
§ Exposant **
§ Parenthèses ()
§ Reste de la division %

§ Ordre des opérations: Règle PEMDAS

13

13

AFFECTATION DE VARIABLES

§ Operateur d’affectation =
§ Syntaxe
variable = valeur

§ Règles pour le nom des variables


§ Pas de caractères spéciaux ( exemple *, |, +, …)
§ Ne peut pas commencer par un chiffre

§ Ne peut pas être un mot réservé du langage

https://docs.python.org/3/reference/lexical_analysis.html#keywords

14

14

7
11/03/2021

AFFECTATION DE VARIABLES

§ Créer une variable nommée annee et ayant la valeur 2018


§ Afficher la valeur de la variable annee
§ Changer la valeur de la variable annee pour lui affecter l’année actuelle
§ Créer une variable nommée lieu et avec la valeur ‘ENSEA’
§ Affecter la valeur 4,33 à la variable moyenne
§ Afficher le type des variables annee, lieu et moyenne

15

15

AFFECTATION DE VARIABLES

§ Affichage du type d’une variable au moyen de la fonction type()


§ Affectations multiples

>>> a , b = 1 , 2

16

16

8
11/03/2021

CHAINE DE CARACTERES
Affectation, Concaténation, Indexation, Méthodes diverses, Formatage

17

DECLARATION DE CHAINE DE CARACTERES

§ Saisir la chaine de caractères entre des guillemets simples 'chaine’

§ Protéger un guillemet avec un anti-slash \ ou saisir la chaine entre


des guillemets doubles "chaine"

§ Déclarer une chaine de caractères sur plusieurs lignes avec trois


guillemets doubles
""" texte
sur plusieurs
lignes """
18

18

9
11/03/2021

AFFICHAGE DE CHAINE DE CARACTERES

§ Possible d’afficher le contenu d’une chaine de caractères au moyen


de la fonction PRINT

>>> print("chaine de caracteres")


>>> print("c:\desktop\nouveau")

§ Ignorer l’interprétation des caractères d’échappement avec le


préfixe r (raw)

>>> print(r"c:\desktop\nouveau")

19

19

ESCAPE CHARACTERS / CARACTERES D’ECHAPPEMENT

§ Combinaison de caractères invoquant une interprétation


alternative d’une série de caractères
§ Cas particulier de METACHARACTER (caractère avec un sens
particulier)
§ Quelques exemples

\t \n \‘ \“ \000 \xhh
Tabulation Nouvelle ligne Caractère avec Caractère avec
la valeur octale la valeur hex HH
000

20

20

10
11/03/2021

CONCATENATION DE CHAINE DE CARACTERES

§ Utiliser l’opérateur + pour concaténer deux variables de type string

§ Plusieurs chaines de caractères se suivant sont automatiquement


concaténées

>>> "Concatenation" "de chaines"

21

21

QUELQUES METHODES DE CHAINE DE CARACTERES

§ str.capitalize() pour passer uniquement le premier caractère en majuscule


§ str.lower() et str.upper() pour passer en minuscule et majuscule
§ str.islower() et str.isupper() pour vérifier la casse

§ str.count(sub) pour compter le nombre d’occurrences de sub ne se chevauchant


pas
§ str.startswith(sub) et str.endswith(sub) pour vérifier si une chaine commence ou
finit par un certaine sous-chaine

§ str.find(sub) pour obtenir la position de sub dans la chaine


§ str.index(sub) est identique à find mais avec une exception ValueError lorsque
sub n’est pas trouvée
22

22

11
11/03/2021

QUELQUES METHODES DE CHAINE DE CARACTERES

§ str.format(*args, **kwargs) pour formater


§ str.join([iterable]) concatène les chaines contenues dans iterable
§ str.ljust(width) et str.rjust(width) pour justifier à gauche et à droite
§ str.lstrip([chars]) et str.rstrip([chars]) pour supprimer des caractères
à gauche et à droite
§ str.replace(old, new) pour remplacer old par new dans la chaine
§ str.split(sep) pour obtenir une liste en utilisant sep comme
séparateur
§ str.zfill(width) pour retourner une copie de la chaine remplie par la
gauche du caractère ASCII ‘0’

23

23

FORMATAGE DE CHAINE DE CARACTERES

§ Ancienne syntaxe

>>> '%s %s' % ('Un', 'Deux')

§ Nouvelle syntaxe

>>> '{} {}'.format('Un', 'Deux')

24

24

12
11/03/2021

FORMATAGE DE CHAINE DE CARACTERES

§ Avec la nouvelle syntaxe, possibilité d’indexer


>>> '{1} {0}'.format('Un', 'Deux')

§ Padding et Alignement
>>> '{:>10}'.format('test’)
>>> '{:10}'.format('test’)
>>> '{:_<10}'.format('test’)
>>> '{:^10}'.format('test')

25

25

FORMATAGE DE CHAINE DE CARACTERES

§ Troncation

>>> '{:.5}'.format('xylophone')

§ Combinaison de Padding et Troncation

>>> '{:10.5}'.format('xylophone')

26

26

13
11/03/2021

FORMATAGE DE CHAINE DE CARACTERES


§ Nombres

>>> '{:d}'.format(42)
>>> '{:f}'.format(3.141592653589793)
>>> '{:4d}'.format(42)

>>> '{:06.2f}'.format(3.141592653589793)
>>> '{:04d}'.format(42)
>>> '{:+d}'.format(42)

§ Nombres signés

>>> '{:+d}'.format(42)
>>> '{: d}'.format((- 23))
>>> '{: d}'.format(42)

27

27

FORMATAGE DE CHAINE DE CARACTERES

§ Named placeholders

>>> '{first} {last}'.format(first='Python', last='programming!’)

§ Possible de passer un dictionnaire en argument

>>> data = {'first': 'Big', 'last': 'Data!’}

>>> '{first} {last}'.format(**data)

28

28

14
11/03/2021

LISTE
Création, Accès aux éléments, Fonction Enumerate, Slicing, Méthodes diverses

29

LISTE

§ Objet représentant une séquence de valeurs


§ Exemple : ("Abidjan", "Bouake", "Daloa")

§ Manière la plus simple de créer une liste

list = []

§ Ajouter un élément à une liste (Méthode append)

list.append(variable)

30

30

15
11/03/2021

LISTE

§ Possible de créer une liste et renseigner ses valeurs en une seule


opération.

§ Les objets dans une liste peuvent être de types différents.

§ Comment afficher le type d’une liste ?

31

31

ACCEDER AUX ELEMENTS D’UNE LISTE

§ Une liste est ordonnée, et chaque élément a un index représentant


sa position dans la liste
§ L’index du premier élément est 0

villes
index 0 1 2
valeur Abidjan Bouake Daloa

§ Syntaxe pour accéder à l’élément à l’index i

list[i]
32

32

16
11/03/2021

ACCEDER AUX ELEMENTS D’UNE LISTE

§ list[i] sélectionne un élément en comptant de la gauche à la


droite. Le premier élément étant à l’index 0
§ list[-i] sélectionne un élément en comptant de droite à
gauche. Le dernier élément étant à l’index -1

S T A T I S T I Q U E
0 1 2 3 4 5 6 7 8 9 10
-11 -10 -9 -8 -7 -6 -5 -4 -3 -2 -1

33

33

FONCTION ENUMERATE

§ Retourne les éléments d’une liste avec leur index

§ Exemple
for index, value in enumerate([‘Abidjan‘,’Daloa‘,‘Man‘]) :
print(index, value)

§ Résultat

0 Abidjan
1 Daloa
2 Man

34

34

17
11/03/2021

SLICING

§ Permet de retourner les éléments d’une liste entre les index fournis
§ La valeur située au dernier index ne sera pas retournée

list[index_debut:index_fin]

35

35

SLICING

§ list[i:] sélectionne tous les éléments après l’élément à l’index i


(qui est aussi inclus dans la sélection)
§ list[:i] sélectionne tous les éléments avant l’élément à l’index i
(qui n’est pas inclus dans la sélection)

36

36

18
11/03/2021

QUELQUES OPERATIONS BASIQUES SUR LES LISTES

§ Accéder à un élément : liste[index]


§ Modifier un élément : liste[index] = valeur

§ Ajouter un objet en dernière position : list.append(objet)


§ Ajouter un élément à l’index i : list.insert(index, objet)

§ Vérifier qu’un objet est membre : objet in liste


§ Compter le nombre d’occurrences : liste.count(objet)

37

37

QUELQUES OPERATIONS BASIQUES SUR LES LISTES

§ Compter le nombre d’éléments : len(liste)


§ Répéter n fois les éléments d’une liste : liste * n

§ Concaténer deux listes : liste1 + liste2


§ Modifier une liste en y ajoutant les éléments d’une autre :
liste1.extend(liste2)

§ Obtenir l’élément avec la valeur minimale : min(liste)


§ Obtenir l’élément avec la valeur maximale : max(liste)

38

38

19
11/03/2021

QUELQUES OPERATIONS BASIQUES SUR LES LISTES

§ Effacer un objet : liste.remove(objet)

§ Effacer un objet (par défaut le dernier) et le retourner:


liste.pop(index)

§ Effacer un objet selon son index : del liste[index]

§ Supprimer tous les éléments de la liste : liste.clear()

39

39

QUELQUES OPERATIONS BASIQUES SUR LES LISTES

§ Ordonner les éléments dans la liste : liste.sort()

§ Inverser l’ordre des éléments de la liste: liste.reverse()

§ Obtenir une copie de la liste : liste.copy()

40

40

20
11/03/2021

TUPLE
Création, Immutabilité, Sequence packing & unpacking

41

TUPLE

§ Ensemble de valeurs séparées par des virgules


>>> t = 124, 'test',286

§ Eléments indexés
>>> t[1]

§ Possible d’imbriquer des tuples

>>> z = t, (8, 9)
>>> y = t, 8,9 # Noter la différence entre y et z

42

42

21
11/03/2021

TUPLE

§ Structure de données immutable (immuable)

>>> t[2]= 10

§ Pouvant cependant contenir des éléments mutables


>>> m = ([1,2,3], [4,5,6])

§ Construction de tuple vide >>> empty =()


§ Construction d’un tuple avec un seul élement >>> one = ‘test’,

43

43

SEQUENCE PACKING, SEQUENCE UNPACKING

§ Packing

>>> t = 1 , 2 , 3

§ Unpacking

>>> x , y , z = t

44

44

22
11/03/2021

SET

45

SET

§ Collection non ordonnée sans élément dupliqué

§ Utile pour des tests d’appartenance ou la suppression de doublons


§ Approprié pour des opérations mathématiques telles que les
unions, les intersections, les différences et les différences
symétriques

§ Création avec des accolades {} ou la fonction set()


§ Pour créer un set vide, {} ne fonctionne pas. Utiliser set()

46

46

23
11/03/2021

SET

>>> basket = {'apple', 'orange', 'apple', 'pear', 'orange', 'banana’}

>>> print(basket)

>>> 'mango' in basket

>>> a = set('abracadabra')
>>> b = set('alacazam')
>>> a # éléments uniques de a
>>> a – b # éléments dans a mais pas dans b
>>> a | b # éléments dans a ou b
>>> a & b # éléments à la fois dans a et b
>>> a ^ b # éléments dans a ou b, mais pas dans les deux

47

47

DICTIONNAIRE
Création, Accès aux éléments, Opérations basiques, Boucle, Constructeur dict()

48

24
11/03/2021

DICTIONNAIRE

§ Ensemble de clé/valeurs
§ Exemples:
§ Etudiants et leurs notes
§ Villes et leur population
§ Personnes et leurs informations

§ {“Abidjan“:5000000, “Bouake“:3000000, “Daloa“:1500000}

49

49

DICTIONNAIRE

§ Créer un dictionnaire vide

d = {}

§ Ajouter un élément

d[cle] = valeur

50

50

25
11/03/2021

DICTIONNAIRE

§ Créer un dictionnaire et ajouter des éléments en une étape

d = {cle1 : valeur1, ….., cleN : valeurN}

§ Affichage de la valeur affectée à une clé

d[cle]

§ Modification de la valeur affectée à une clé

d[cle] = nouvelle_valeur

51

51

QUELQUES OPERATIONS BASIQUES SUR LES DICTIONNAIRES

§ Accéder à un élément : d[cle]


§ Retournera une erreur si la clé n’existe pas dans le dictionnaire

§ Accéder à un élément sans retourner d’erreur si la clé n’existe pas :


d.get(cle)

§ Modifier un élément : d[cle] = valeur

§ Compter le nombre d’éléments : len(d)

52

52

26
11/03/2021

QUELQUES OPERATIONS BASIQUES SUR LES DICTIONNAIRES

§ Vérifier qu’un objet est parmi les clés : objet in d

§ Obtenir toutes les clés : d.keys()


§ Obtenir toutes les valeurs : d.values()

§ Effacer un élément selon sa clé : del d[cle]


§ Effacer tous les éléments : d.clear()

§ Supprimer le dictionnaire : del d

53

53

BOUCLE SUR LES DICTIONNAIRES

§ Parcourir les clés d’un dictionnaire

villes = {
“abidjan“: 5000000,
“bouake“: 3000000,
“daloa“: 1500000
}

for ville in villes:


population = villes[ville]

54

54

27
11/03/2021

BOUCLE SUR LES DICTIONNAIRES

§ Méthode items() pour parcourir les clés et valeurs

villes = {
“abidjan“: 5000000,
“bouake“: 3000000,
“daloa“: 1500000
}

for ville, population in villes.items():


print(population)

55

55

CONSTRUCTEUR DICT()

§ Permet de créer un dictionnaire à partir d’une liste de paires


clé/valeur stockées sous la forme de tuples:

>>> dict( [(‘abidjan’,500),(‘’,300),(‘daloa’,150)] )

56

56

28
11/03/2021

INDENTATION
Ou la structuration du code Python

57

BLOCK

§ Groupe d’instructions dans un programme ou un script, généralement


composé d’au moins une instructions et des déclarations du block, selon le
langage de programmation.
§ Possibilité d’imbriquer des blocs
§ Permet de traiter un ensemble d’instructions comme une seule instruction
§ Permet de définir un style de programmation, ou d’organiser pour plus de
clarté

begin … end
do … done
{…}
if … fi
58

58

29
11/03/2021

59

59

INDENTATION

§ Structuration du code effectuée avec l’indentation


§ Pas une question de style, mais plutôt une question de nécessité
du langage

§ Facilite la lecture et la compréhension de code Python

§ Espace vs Tabs (Recommandation selon PEP8 pour Espace)

60

60

30
11/03/2021

EXEMPLES D’INDENTATION

def ma_fonction(): # Définition de fonction. Remarquer le symbole (:)


a = 2 # Cette ligne appartient à la définition de la fonction
return a # Cette ligne également appartient à la même fonction
print(ma_fonction()) # Cette ligne est HORS du bloc de la fonction

if a > b: # Le block IF débute ici


print(a) # Cette ligne appartient au block IF
else: # le ELSE doit être au même niveau que le IF
print(b) # Cette ligne appartient au block ELSE

61

61

FICHIERS ET ITERATIONS
Lecture de fichier, For, While,

62

31
11/03/2021

LIRE UN FICHIER

§ Fonction open() pour ouvrir un fichier


§ 2 arguments principaux:

§ Le nom du fichier

§ Le mode d’accès (principalement ’r’ pour lecture, ‘w’ pour


écriture)

>>> open(fichier, mode=‘r’)


ou
>>> open(fichier, ‘r’)

63

63

LIRE UN FICHIER

§ Un File Object (ou Handle) ne contient pas directement le contenu


d’un fichier, mais est une interface
§ Contient des méthodes pour lire et modifier le contenu

§ Méthode ‘read’ pour lire le contenu d’un File Object

a = open(fichier, mode=‘r’)
contenu = a.read()
print(contenu)

64

64

32
11/03/2021

LIRE UN FICHIER

§ Que se passe t’il lorsque nous ré-exécutons la méthode read() sur


notre file object ?

§ Recréez le handle et testez le paramètre 20 pour la méthode read.


Pouvez-vous expliquer ce qui se passe ?

65

65

LIRE UN FICHIER

§ Cas de la séquence \n
§ Fichier crime_rates.csv

66

66

33
11/03/2021

LIRE UN FICHIER

§ Ouvrir le fichier crime_rates.csv et en afficher le contenu.

§ L’interpréteur Python traite tout le contenu du fichier comme une


seule chaine de caractère. Comment pouvons-nous traiter chaque
ligne de façon individuelle?

§ Comment pouvons-nous récupérer uniquement le nom des villes


dans le fichier ?

67

67

BOUCLE FOR

§ Permet de traiter de façon individuelle tous les éléments d’un ensemble

for iterator in sequence:


instructions

Exemple
villes = ['Man', 'Daloa', 'Abidjan', 'Odienne']
for ville in villes :
print(ville)

§ Action : Récupérer dans une liste nommée liste_villes, toutes les lignes du
fichier sous la forme de listes elles-mêmes
68

68

34
11/03/2021

BOUCLE FOR…ELSE

§ La boucle ELSE est exécutée à la fin de toutes les itérations

for iterator in sequence:


instructions
else:
instructions

69

69

ACCES AUX ELEMENTS D’UNE LISTE DE LISTES

§ Bracket notation

liste[i][j]…[n]

70

70

35
11/03/2021

CONVERSION DE TYPES

§ Convertir en ENTIER : int()


§ Convertir en FLOAT : float()

§ Convertir en STRING : str()

Action : Créer une nouvelle version de la liste liste_villes, ayant les


taux de criminalité en valeur entière.

71

71

BOUCLE WHILE

§ Utilisée pour exécuter des instructions de manière répétée tant qu’une


expression est vraie

while expression:
instructions

72

72

36
11/03/2021

BOUCLE WHILE…ELSE

§ Python évalue l’expression de la clause WHILE de manière répétée et tant


qu’elle est vraie exécute les instructions. Si l’expression est fausse, les
instructions de la clause ELSE si elle existe est exécutée et la boucle se
termine

while expression:
instructions
else:
instructions

73

73

BREAK , CONTINUE , PASS

§ break
§ Uniquement dans les boucles FOR et WHILE
§ Interrompt la boucle FOR ou WHILE la plus profonde

§ continue
§ Fait passer la boucle à son itération suivante

§ pass
§ Ne fait rien. Permet d’écrire des syntaxes correctes sans effectuer
d’action

74

74

37
11/03/2021

RANGE

§ Permet de générer une séquence de nombres en commençant par la borne


inférieure, et jusqu’à la borne supérieure

range(start, end, step)

§ start : élément initial de la séquence, par défaut 0


§ end : valeur maximale de la séquence, non retournée
§ Step : différence entre toutes les valeurs de la séquence, par défaut 1

75

75

RANGE

§ Dans les versions de Python 2, range retourne directement une liste

§ Dans les versions de Python 3.x, range génère une séquence. Afin d’obtenir
une liste, il vous faudra donc ajouter une conversion en liste

list(range(….))

76

76

38
11/03/2021

BOOLEEN ET LOGIQUE CONDITIONNELLE

77

BOOLEEN ET OPERATEUR DE COMPARAISON

§ Possibilités pour la classe BOOLEAN : True , False


§ Syntaxe des Opérateurs de comparaisons

variable1 operateur variable2

§ Quelques opérateurs:

== != > < >= <=

78

78

39
11/03/2021

BOOLEEN ET LOGIQUE CONDITIONNELLE

§ Operateur IF pour exécuter des instructions lorsqu’une condition est vraie (True)

Syntaxe1
if variable1 operateur variable2 :
instructions

Syntaxe 2
if condition :
instructions

Syntaxe 3
if variable1 is boolean :
instructions

79

79

IMBRICATION DE LOGIQUE CONDITIONNELLE

§ Un jeu d’instructions pour le corps du IF peut également être un autre block


IF

if condition :
if condition :
instructions

§ Action : Sélectionner au hasard un numéro de ligne dans le nouvel objet


‘liste_villes’ contenant les taux de criminalité en INT, et dans le cas où le taux
de cette ligne est supérieur à 200, ET inférieur à 700, afficher le texte « Entre
200 et 700 »

80

80

40
11/03/2021

IMBRICATION DE LOGIQUE CONDITIONNELLE ET BOUCLE

§ Un jeu d’instructions pour le corps d’une boucle (FOR) peut également être
un block IF, ou inversément

for iterator in liste :


if condition :
instructions

§ Action : Afficher toutes les villes de ‘liste_villes’ avec un taux de criminalité


compris entre 200 et 700. Ensuite, indiquer à la fin de l’affichage le nombre
de villes concernées.

81

81

ACTIVITE 1

§ Calculer les éléments suivants


§ Nom de la ville avec le taux de criminalité le plus bas

§ Nom de la ville avec le taux de criminalité le plus élevé

§ Taux de criminalité moyen

82

82

41
11/03/2021

ACTIVITE 2

§ Dataset unisex_names_table.csv
§ Actions :
1. Ouvrir le fichier en lecture et assigner le contenu à la variable ‘contenu’
2. Convertir ‘contenu’ en une liste de listes nommée ‘liste_str_noms’. Afficher les
5 premiers éléments, puis la valeur de la 2e colonne (prénom) du 4e élément
3. Créer une nouvelle liste ‘liste_noms’ en convertissant les valeurs dans
’liste_str_noms’ pour ne conserver que le prénom en String, et les autres
valeurs devenant des Float.
4. Créer une liste contenant uniquement les prénoms partagés par moins de
1000 personnes
5. Créer une liste contenant uniquement les prénoms partagés par plus de 1000
personnes

83

83

IF … ELIF …ELSE

§ L’expression du IF est débord évaluée. Si elle est vraie, ses instructions sont
exécutées.
§ Sinon, les expressions suivantes pour les block ELIF sont exécutées jusqu’à ce
qu’une soit vraie
§ Si toutes les expressions sont fausses, alors les instructions de la clause ELSE, si
elle existe, sont exécutées.
if expression1 :
instructions1
elif expression2:
instructions2

elif expressionN:
instructionsN
else:
instructionsELSE

84

84

42
11/03/2021

TESTS MULTIPLES

§ Utiliser les opérateurs booléens and (&) et or (|)

Syntaxe :
if condition1 & condition2:
instructions

if condition3 | condition4:
instructions

85

85

FONCTION

86

43
11/03/2021

FONCTION

§ Fichier movie_metadata.csv
§ Objectif :
1. Créer une liste (movie_data) de listes contenant les données du fichier
2. Afficher les 5 premières lignes du fichier

87

87

FONCTION - AVANTAGES

§ Réusabilité
§ Facilité à maintenir

§ Information hiding : Permet à d’autres personnes d’utiliser notre


code sans avoir besoin d’en connaitre la logique interne
§ Modularité : Permet de décomposer une logique complexe en de
plus petits composants
§ Abstraction : une fonction généralisée à un haut niveau peut être
utilisée dans plusieurs situations et projets différents.

88

88

44
11/03/2021

FONCTION

§ Définition d’une fonction

def function_name (args) :


instructions

instructions
return resultat

89

89

FONCTION

§ Définition d’une fonction avec plusieurs instructions RETURN

def function_name (args) :


instructions

if condition :
return True
else :
return False

90

90

45
11/03/2021

FONCTION

§ Définition d’une fonction avec des arguments optionnels

def function_name (args, opt_arg=value) :


instructions

instructions
return resultat

91

91

ACTIVITE 1

§ Créer une fonction retournant le premier élément d’une liste


passée en argument

§ Créer une fonction retournant une liste contenant uniquement les


noms de films, à partir d’une liste de listes passée en argument
(movie_data)

92

92

46
11/03/2021

ACTIVITE 2

§ Ecrire une fonction ‘is_usa’ prenant en argument une liste dans le


format ci-dessous

>>> movies_data[17]

['The Chronicles of Narnia: Prince Caspian', 'Andrew


Adamson', 'Color', '150', 'Peter Dinklage',
'English', 'USA', '2008’]

§ La valeur de retour doit être True si le 7e élément de la liste est «


USA », sinon retourner False

93

93

ACTIVITE 2

§ Hormis la provenance, nous nous intéresserons maintenant à une


information différente. Par exemple, l’année. Dans la même logique que
les fonctions is_usa ou is_uk, écrivons une fonction year_is vérifiant
l’année de parution d’un film.

§ Comment nous simplifier le code si nous devons vérifier d’autres


informations ?

§ Ecrivons une fonction générique nommée index_equals_str prenant en


argument une liste, un index et une chaine et vérifiant si dans la liste
l’élément à la position index égale la chaine passée en argument.

94

94

47
11/03/2021

ACTIVITE 3

1) Ecrire une fonction ‘counter’ qui compte le nombre de lignes


correspondantes à des films dans le fichier (ie dans la liste movies_data
2) Ecrire une fonction ‘feature_counter’ qui combine les logiques des
fonctions ‘index_equals_str’ et ‘counter’ pour par exemple détermine le
nombre de films réalisés aux USA
3) Ecrire une fonction ‘summary_statistics’ prenant en argument une liste, et
retournant un dictionnaire contenant les valeurs suivantes
§ num_japan_movies : nombre de films produits au Japon
§ num_color_movies : nombre de films en couleur
§ movies_in_english : nombre de films en anglais

95

95

CREATION ET EXECUTION DE SCRIPTS

96

96

48
11/03/2021

CREATION D’UN SCRIPT PYTHON

§ Ecriture du code dans un fichier script.py

if __name__ == "__main__":
print("Formation Python")

§ Exécution au moyen de la syntaxe

$ python script.py

97

97

PASSAGE D’ARGUMENTS

§ Possible de passer des arguments lors de l’exécution de notre script


en ligne de commande

import sys
if __name__ == "__main__":
print(sys.argv[1])

§ Utilisation

$ python script.py "Python est cool"


98

98

49
11/03/2021

SCOPE DES VARIABLES

99

NAMESPACE

§ Une philosophie de base de Python : Tout est objet !


§ Containers de mapping entre les objets et leur nom

§ Une bonne manière de l’imaginer serait un dictionnaire

namespace1 = {‘nom1’:objet1, ‘nom2’:objet2, ... }

§ Possibilité d’avoir plusieurs namespaces indépendants dans Python

namespace1 = {‘nom1’:objet1, ‘nom2’:objet2, ... }


namespace2 = {‘nom3’:objet3, ‘nom4’:objet4, ... }

100

100

50
11/03/2021

SCOPE

§ Niveau de hiérarchie du Namespace où rechercher un objet

§ Domaine de visibilité/accessibilité d’un objet

101

101

SCOPE

§ Exemple

a = 1

def fonction1():
a = 2
print(a, ‘fonction 1’)

print(a, ‘variable initiale’)

102

102

51
11/03/2021

SCOPE

§ Dans quel ordre rechercher les objets dans les différents


namespaces?

§ Règle LEGB
§ Local : à l’intérieur d’une fonction ou d’une méthode de classe
§ Enclosed : à l’intérieur de la fonction encapsulatrice
§ Global : niveau supérieur d’exécution du script
§ Built-in : objets réservés de Python
§ Error : Au cas où l’objet n’est retrouvé nulle part

103

103

SCOPE (LOCAL VS GLOBAL)

§ Local / Global

a = 1
def fonction1():
a = a*2
# instructions

def fonction2():
c = 3
# instructions

104

104

52
11/03/2021

SCOPE (MOT CLE GLOBAL)

§ Accéder à une variable globale dans une fonction

a_var = ‘global’

def fonction1():
global a_var
a_var = ‘local’
print(a_var, ‘ dans la fonction1()’)

print(a_var, ‘ hors de la fonction1()’)


fonction1()
print(a_var, ‘ hors de la fonction1()’)

105

105

SCOPE (LEG)

§ Local / Enclosed / Global


a = ‘variable globale’
def exterieur():
a = ‘variable enclosed’
def interieur():
a = ‘variable locale’
print(a)
interieur()
exterieur()
106

106

53
11/03/2021

SCOPE (MOT CLE NONLOCAL)

§ Accéder depuis une fonction encapsulée, à une variable enclosed


a = ‘variable globale’
def exterieur():
a = ‘variable enclosed’
print(‘exterieur avant :’, a)
def interieur():
nonlocal a
a = ‘variable interieure’
print(‘interieur:’, a)
interieur()
print(‘exterieur apres :’, a)
exterieur()
107

107

SCOPE (LEGB)

§ Rappel: Tout est objet!


§ Par exemple créons une fonction nommée len

Juste pour la compréhension du concept. Eviter de redéfinir des


fonctions natives de Python sans être sur de ce que l’on fait !

108

108

54
11/03/2021

ERREURS DE DEBOGAGE

109

ERREURS

§ Avant d’être exécuté, le code est « parsé » par l’interpréteur Python


§ Le code allant à l’encontre des règles du langage est signalé
§ Types principaux (Syntax errors, Runtime errors)
§ Syntax errors:
§ Quotes (“ ‘) manquantes
§ Indentation incorrecte
§ Mots-clés du langage incorrects
§ Runtime errors:
§ Appel d’une fonction avant sa définition
§ Appel d’une méthode ou d’un attribut n’existant pas
§ Tentative de conversion d’un objet dans un type incompatible

110

110

55
11/03/2021

ERREURS

§ Erreur Runtime : surviennent pendant l’exécution du programme


§ Donc plus difficiles à détecter pendant l’écriture du code
§ Il existe des méthodes pour écrire du code qui tient compte des erreurs (pas
d’interruption, actions spécifiques, etc.)

§ Liste exhaustive des erreurs Python

https://docs.python.org/3/library/exceptions.html#IndentationError

111

111

QUELQUES EXEMPLES

Corriger les éventuelles erreurs dans les lignes de code ci-dessous


a="demain
de reponse_univers:
print(“42“)
de reponse_univers:
print(“42“)
print(“Oui“

112

112

56
11/03/2021

QUELQUES EXEMPLES

Corriger les éventuelles erreurs dans les lignes de code ci-dessous


de reponse_univers () :
print(“42“)
A = 10
A + “2“
villes = [“Abidjan“,“Bouake“, “Daloa“]
print(villes[3])
f = open(“fichier.txt“)
f.split(“\“)

113

113

COMPREHENSIONS

114

114

57
11/03/2021

COMPREHENSION DE LISTE

§ Considérons cette liste

>>> villes = [‘Abidjan‘,‘Bouake‘,‘Daloa‘]

§ Une boucle classique nécessite plusieurs lignes de code

>>> longueurs_villes = []
>>> for ville in villes:
>>> longueurs_villes.append(len(ville))

§ Il est possible de réduire le code en une seule ligne

>>> longueurs_villes = [len(ville) for ville in villes]

115

115

COMPREHENSION DE LISTE

§ Considérons cette liste

>>> prix = [ 441, 225, 2500 ]

§ Générer une nouvelle liste contenant les prix multipliés par 2

§ Générer une nouvelle liste contenant les prix diminués de la racine


du prix

116

116

58
11/03/2021

ACTIVITE

§ A partir du fichier legistators.csv, créer la liste de listes legislators


§ Créer ensuite un dictionnaire name_counts contenant le nombre
de fois qu’un prénom (colonne first_name) féminin apparait dans
le fichier après 1940.

117

117

NONE

§ Le code suivant permet de retrouver la valeur maximale d’une liste

>>> valeurs = [50,60,70]


>>> valeur_max = 0
>>> for i in valeurs:
>>> if i > valeur_max:
>>> valeur_max=i

§ Quel constat pouvez-vous faire si l’on change le contenu de la liste


de départ ?

118

118

59
11/03/2021

NONE

§ Quelle sera la nouvelle valeur de valeur_max dans le code suivant?

>>> valeurs = [-50,-60,-70]


>>> valeur_max = 0
>>> for i in valeurs:
>>> if i > valeur_max:
>>> valeur_max=i

§ Comment corriger cette anomalie ?

119

119

NONE

§ Utilisation de None pour corriger notre code

>>> valeurs = [-50,-60,-70]


>>> valeur_max = None
>>> for i in valeurs:
>>> if valeur_max is None or i > valeur_max:
>>> valeur_max=i

§ None indique que la variable n’a pas de valeur. Son type est
NoneType

120

120

60
11/03/2021

NONE

§ Comparer une valeur à None génère une erreur

>>> a = None
>>> a > 1

§ Pour comparer une valeur pouvant potentiellement être None,


réaliser en premier un test sur cette valeur

>>> valeur_max is None or i > valeur_max

121

121

NONE

§ A partir de la liste ci-dessous

>>> valeurs = [None, 10, 20, 30, None, 50]

§ Construire une nouvelle liste contenant True, si une valeur est


différente de None et est supérieure à 30, et False dans le cas
contraire.

122

122

61
11/03/2021

ACTIVITE

§ A partir du fichier legistators.csv, créer la liste de listes legislators


§ Créer ensuite un dictionnaire name_counts contenant le nombre
de fois qu’un prénom (colonne first_name) féminin apparait dans
le fichier après 1940.
§ Créer une variable max_value contenant la plus grande valeur dans
le dictionnaire name_counts
§ Créer une liste nommée top_female_names contenant les prénoms
retrouvés le plus de fois (max_value)
§ Quels sont les prénoms masculins les plus fréquents pour les
personnes nées après 1940 ?
123

123

COMPREHENSION DE DICTIONNAIRES

§ Même logique que les compréhensions de liste


§ Exemple (Augmentons la population de 3%)

>>> villes = {
“abidjan“: 5000000,
“bouake“: 3000000,
“daloa“: 1500000
}

>>> villes_2019 = { k:v*1.03 for (k,v) in villes.items() }

124

124

62
11/03/2021

COMPREHENSION DE SETS

§ Exemple d’utilisation

>>> nombres = {1, 2, 3, 4, 5}

>>> carres = { n**2 for n in nombres}

125

125

EXERCICE

126

63
11/03/2021

PARTIE 1

§ Fichier US_births_1994-2003_CDC_NCHS.csv
§ Ouvrir le fichier, afficher les 10 premières lignes

§ Créer une fonction ‘read_csv’

§ Prenant en argument le nom du fichier

§ Retournant une liste de listes dont les valeurs sont de type INT
§ Utiliser la fonction ‘read_csv’ pour lire le fichier « Us_births… » et
affecter le résultat à la variables « naissances »
§ Afficher les 10 premières lignes et confirmer que les valeurs sont
bien de type INT, et qu’il n’y a pas de ligne d’entête.

127

127

PARTIE 2

§ Créer une fonction ‘month_births’


§ Prenant en argument une liste de listes d’entier

§ Retournant un dictionnaire contenant le compte de naissance par


mois dans le format suivant {1: 123, 2: 125, 3:245, …., 12: 789}
§ Utiliser la fonction ‘month_births’ sur notre variable
« naissances », et affecter le résultat à « naissances_par_mois »
§ Créer une fonction similaire, mais pour le nombre de naissance par
jour de la semaine ‘days_births’
§ Créer la variable « naissances_par_jour »

128

128

64
11/03/2021

PARTIE 2

§ A bien les analyser, les fonctions ‘month_births’ et ‘days_births’ ont


beaucoup de similarité
§ Créer une fonction « comptes_naissances » prenant en argument:
§ Une liste de liste d’entiers
§ L’index de la colonne pour laquelle nous souhaitons les totaux
§ Retourner un dictionnaire des totaux
§ Utiliser la nouvelle fonction pour calculer:
§ naissances_par_an
§ naissances_par_mois
§ naissances_par_jourdumois
§ naissances_par_joursemaine
129

129

CONCEPT DE CLASSE

130

65
11/03/2021

CLASSE

§ Python est un langage Orienté-objet


§ Une assignation de variable est en fait la création d’un objet d’une
certaine classe.

>>> training = “Python“


>>> annee = 2019

§ Template de construction contenant des attributs (Fonctions et


Variables)
§ Similaire aux modules, mais avec la possibilité d’avoir plusieurs
classes dans un même fichier de code
131

131

CLASSE

§ Définition d’une classe nommée Dataset


class Dataset:
def __init__(self):
self.type = ‘csv’

§ Création d’un objet de type Dataset


new_dataset = Dataset()

§ Accès aux attributs


print(new_dataset.type)
132

132

66
11/03/2021

ACTIVITE

§ Définir une classe nommée Dataset


§ A l’intérieur de cette classe, créer un attribut nommé ‘type’, avec la
valeur ‘csv’
§ Créer une instance de la classe Dataset et l’assigner à la variable
dataset
§ Afficher le type de l’instance dataset

133

133

CLASSE

§ Ajout dynamique des valeurs à une classe lors de l’instanciation

class Dataset:
def __init__(self, data):
self.data = data

§ Création d’un objet de type Dataset

new_dataset = Dataset(data)
print(new_dataset.data)
134

134

67
11/03/2021

ACTIVITE (SUITE)

§ Modifier la classe Dataset en ajoutant un paramètre data à la


méthode __init__(), et en attribuant sa valeur à self.data
§ Lire le fichier nfl.csv et affecter son contenu (liste de listes) à la
variable nfl_data
§ Créer un objet nfl_dataset de type Dataset, en passant nfl_data en
argument
§ Utiliser l’attribut data de l’objet nfl_dataset pour en affecter la
valeur à la variable dataset_data

135

135

CLASSE

§ Ajout de méthodes additionnelles

class Dataset:
def __init__(self, data):
self.data = data

def print_data(self):
print(self.data[:5])

136

136

68
11/03/2021

ACTIVITE (SUITE)

§ Modifier la classe Dataset en ajoutant une méthode print_data()


prenant un argument N. Cette méthode devra afficher les N
premières lignes de la liste data
§ Utiliser la méthode print_data pour afficher les 5 premières lignes
de l’objet nfl_dataset
§ Créer une méthode extract_header(), permettant de
§ définir un attribut header contenant l’entête

§ Retirer la ligne contenant l’entête de l’attribut data

§ Quel constat pouvez-vous faire sur la fonction extract_header()?


Quelle correction apporter?
137

137

ACTIVITE (SUITE)

§ Ajouter une méthode column prenant un argument label, et qui


retourne une liste des valeurs dans la colonne correspondant à
l’argument label. Si l’argument n’existe pas dans le header,
retourner None
§ Créer une variable nommée year_column et lui affecter le résultat
de column(‘year‘)
§ Créer une variable nommée player_column et lui affecter le
résultat de column(‘player’)

138

138

69
11/03/2021

ACTIVITE (SUITE)

§ Ajouter une méthode unique_count() à notre classe Dataset , qui


accepte un argument label, et qui retourne le compte d’éléments
unique dans la colonne ‘label’
§ Créer une variable nommée total_years et lui affecter le nombre
unique d’années ‘year‘

139

139

METHODE DE CLASSE __REPR__()

§ Retourne une représentation de notre objet en chaine de


caractères

§ Il existe d’autres méthodes spéciales de classe

https://docs.python.org/3/reference/datamodel.html#basic-customization

140

140

70
11/03/2021

ACTIVITE (SUITE ET FIN)

§ Afficher notre objet nfl_dataset

§ Ajouter notre méthode spéciale _ _repr_ _() pour afficher les 5


premières lignes converties en string et concatenées

§ Afficher à nouveau notre objet nfl_dataset et observer la différence

141

141

MODULE

142

71
11/03/2021

MODULE

§ Collection de code
§ Permet d’avoir un code propre et élégant en séparant des objets dans des
fichiers distincts et hiérarchisés
§ Ajout de nouvelles fonctionnalités écrites par d’autres personnes
§ Peut contenir n’importe quoi (Classes, Fonctions, Variables, Assets, etc.)

§ Pour accéder à un module, il faut l’importer

import module_name

§ Implique que nous avons du code dans le fichier module_name.py, et qu’il est
accessible par l’interpréteur Python

143

143

MODULE

§ Après l’importation, utiliser les fonctions et variables avec la


notation « . »

import module_name
module_name.une_fonction()

§ Importons le module math , et utilisons ses fonctions sqrt() et


floor() pour calculer la racine carrée de 135 et la partie entière de
39.5

144

144

72
11/03/2021

MODULE

§ Namespace : Dictionnaire contenant tous les fonctions et éléments


des modules chargés
§ Voir la liste des modules chargés

dir()

§ Attribuer un alias à un module

import module_name as m
m.function1()
m.function2()
145

145

MODULE – IMPORT DE FONCTIONS SPECIFIQUES

from module_name import fonction1, fonction2

§ Avantage: sélectionner uniquement ce dont on a besoin


§ Inconvénient :

§ Objets importés non préfixés

§ Objet importé écrasé par toute référence future portant le même


nom

146

146

73
11/03/2021

MODULE – IMPORT DE TOUTES LES FONCTIONS

§ Mauvaise pratique. Pas recommandée

from module_name import *

§ Pollution du Namespace
§ Possibilité d’écraser des définitions de fonctions ou objets dans
d’autres modules Objets importés non préfixés

147

147

MODULE – UTILISATION DES VARIABLES

§ Un module peut également avoir des variables prédéfinies

import module_name
print(module_name.objet)

148

148

74
11/03/2021

MODULE – EXEMPLE AVEC LE MODULE CSV

§ Code générant une liste de listes

import csv
f = open(“my_data.csv“)
csvreader = csv.reader(f)
my_data = list(csvreader)

149

149

ACTIVITE

§ A partir du contenu du fichier nfl.csv et en utilisant le module csv,


générer une liste de listes nommée nfl
§ Compter le nombres de victoires de l’équipe "New England
Patriots"
§ Créer une fonction prenant en argument le nom d’une équipe, et
retournant le nombre de victoires de cette équipe
§ Calculer le nombre de victoires des équipes "Atlanta Falcons" et
"Dallas Cowboys"

150

150

75
11/03/2021

CREATION DE MODULE
§ Commençons par créer un fichier hello.py avec le contenu suivant

def world():
print(‘Hello World’)

§ Ensuite, dans notre fichier principal program.py, situé dans le même dossier que notre fichier hello.py

# Import du module hello


import hello

# Appel de notre fonction


hello.world()

§ Il aurait été possible de simplement faire

from hello import world


world()

151

151

CREATION DE MODULE – UTILISATION DE VARIABLES


§ Modifions notre fichier hello.py avec le contenu suivant

def world():
print(‘Hello World’)
training = ‘Python’

§ Ensuite, dans notre fichier principal program.py, toujours situé dans le même dossier que notre fichier hello.py
# Import du module hello
import hello
# Appel de notre fonction
hello.world()

# Affichage de la variable
print(hello.training)

152

152

76
11/03/2021

CREATION DE MODULE – UTILISATION DE CLASSES


§ Créons une classe dans notre fichier hello.py
def world():
print(‘Hello World’)

training = ‘Python’
class Formation:
def __init__(self, title, duration):
self.title = title
def show_infos(self):
print(‘Formation {}: {} days’.format(self.title, self.duration))

§ Ensuite, dans notre fichier principal program.py, toujours situé dans le même dossier que notre fichier hello.py
# Import du module hello
import hello
# Appel de notre fonction
hello.world()

# Affichage de la variable
print(hello.training)
# Appel de classe
p = hello.Formation(‘Python’,5)
p.show_infos()

153

153

CREATION DE MODULE – EXECUTION DE CODE A L’INTERIEUR DU MODULE

§ Créons un nouveau fichier run_function.py


def world():
print(‘Hello World’)
# Appel de notre fonction à l’intérieur du module
world()

§ Ensuite, dans un nouveau fichier run_program.py, situé dans le même dossier que notre
fichier run_function.py
# Import du module run_function
import run_function

154

154

77
11/03/2021

ACCES A UN MODULE DEPUIS UN AUTRE REPERTOIRE

§ Un module peut servir à plus d’un projet

§ Option 1 : Ajout de Paths


§ Invoquer le chemin du module depuis le programme utilisant ce module
§ Inconvénient : ce module ne sera pas accessible sur tout votre environnement

§ Option 2 : Ajout du module au Path de Python


§ Ajouter notre module au dossier où Python recherche les modules et Packages

155

155

ACCES A UN MODULE DEPUIS UN AUTRE REPERTOIRE – OPTION 1

§ Dans le code devant utiliser notre module hello.py

import sys
sys.path.append(‘/chemin/vers/dossier/du/module/hello’)

import hello

156

156

78
11/03/2021

ACCES A UN MODULE DEPUIS UN AUTRE REPERTOIRE – OPTION 2

§ Affichons les chemins systèmes de Python


>>> import sys
>>> print(sys.path)

§ Rechercher dans le résultat le chemin correspondant à l’environnement de travail


et se terminant par site-packages

157

157

IMPORTER DES NOTEBOOKS JUPYTER EN TANT QUE MODULES

§ https://jupyter-notebook.readthedocs.io/en/stable/examples/Notebook/Importing%20Notebooks.html

158

158

79
11/03/2021

PACKAGE

159

PACKAGE

§ Un module contient du code


§ … et peut donc contenir également d’autres modules

160

160

80
11/03/2021

PACKAGE

§ La section from nous permet de naviguer dans la hiérarchie du module


§ La section import nous indique quel fichier du module importer

from django.conf.urls.static import static

§ Dans certains cas, le module est constitué d’un seul fichier. Il est alors
possible d’omettre la section from

import csv

161

161

INSTALLATION DE MODULE OU PACKAGE NON-STANDARD

§ Hormis les modules standards de Python (os, math, csv, etc.)


certains modules sont disponibles pour installation manuelle
§ Installer une module officiellement publié se fait avec l’utilitaire pip
§ Par défaut, présent dans les installations de Python. Sinon il est
possible de télécharger le fichier get-pip.py depuis internet pour
lancer l’installation de pip

$ pip install django


$ pip install flask requests

§ Disponible dans l’environnement après l’installation


162

162

81
11/03/2021

CREATION DE PACKAGE

§ Documentation officielle Python

https://packaging.python.org/tutorials/packaging-projects/

163

163

MANIPULATION DE FICHIERS

164

164

82
11/03/2021

FICHIER TEXTE

165

165

TYPES DE FICHIERS

§ La fonction open() ouvre un fichier et un retourne un ‘File object’

§ Un File object contient des méthodes et attributs pour récupérer


des informations sur le fichier ouvert, mais également pour le
manipuler

§ Dans Python, un fichier est catégorisé en deux types:


§ Texte

§ Binaire

166

166

83
11/03/2021

TYPES DE FICHIERS / TEXTE

§ Séquence de lignes, chaque ligne incluant une séquence de


caractères
§ Chaque ligne se termine par un caractère spécial: EOL

§ Plusieurs types de EOL : {,} , newline, \n

§ Indique que la ligne courante est terminée, et qu’une nouvelle


commence

167

167

TYPES DE FICHIERS / BINAIRE

§ Tout type de fichier n’étant pas du texte


§ Ouvert uniquement par une application qui en comprend la
structure

168

168

84
11/03/2021

LECTURE DE FICHIER TEXTE

§ Fonction open()

file = open(‘fichier’, mode)

§ Mode:
§ ‘r’ : lecture

§ ‘w’ : écriture (écrase tout fichier existant avec le même nom)

§ ‘x’ : création et écriture dans un nouveau fichier

§ ‘a’ : ajout (à la fin du fichier)

§ ‘r+’ : lecture et écriture dans un fichier


169

169

CREATION DE FICHIER TEXTE

§ Fonction write()
§ Exemple de code:

file = open(‘fichier’ , ‘w’)

file.write(‘Hello world’)
file.write(’Ceci est un exemple’)

file.close()

170

170

85
11/03/2021

LECTURE DE FICHIER TEXTE

§ Fonctions read(), et readline(), et readlines()


§ Une fois qu’une des opérations de lectures a été utilisée, les autres
ne fonctionneront pas. Il faudra à nouveau ouvrir le fichier si l’on
souhaite utiliser une autre fonction

§ Exemple de code:

file.read(5) # 5 caractères suivants


file.readline(3) # la ligne à l’index 3
file.readlines() # liste contenant les lignes

171

171

SYNTAXE WITH

§ Syntaxe et gestion des exceptions plus propres


§ Referme automatiquement les fichiers ouverts

§ Bonne pratique

§ Exemple de code:

with open(‘fichier’, ‘w’) as file:


file.write(‘Hello world’)
file.write(’Ceci est un exemple’)

172

172

86
11/03/2021

FICHIER CSV

173

173

LECTURE DE FICHIERS CSV

§ Module csv
§ Fonction csv.reader()

§ Exemple de code

import csv
with open(‘fichier.csv’, ‘r’) as csvfile:
csvreader = csv.reader(csvfile, delimiter=‘;’)
for i in csvreader:
print i

174

174

87
11/03/2021

LECTURE DE FICHIERS CSV

§ Fonction csv.writer()
§ Exemple de code

import csv
with open(‘resultat.csv’, ‘r’) as csvfile:
csvwriter = csv.reader(csvfile, delimiter=‘;’)
for i in liste_de_listes:
csvwriter.writerow(i)

175

175

WHAT NEXT ?

§ Se documenter et explorer les éléments suivants:


§ DictReader

§ DictWriter

§ Dialect

§ https://docs.python.org/3/library/csv.html

176

176

88
11/03/2021

FICHIER EXCEL

177

177

FICHIER EXCEL

§ Plusieurs librairies existent pour manipuler des fichiers au format


excel (xlsx, xls, xlsm)
§ Openpyxl

§ Installation

$ pip install openpyxl

§ Documentation

https://openpyxl.readthedocs.io/en/stable/
178

178

89
11/03/2021

OPENPYXL / CRÉER UN FICHIER EXCEL

§ Créer un objet de la classe Workbook


§ Sélectionner le Worksheet actif (Un workbook est toujours créé
avec au moins 1 worksheet)
§ Accéder aux cellules, et définir leur contenu

§ Enregistrer le Workbook dans un fichier excel

179

179

OPENPYXL / CRÉER UN FICHIER EXCEL

>>> from openpyxl import Workbook


>>> wb = Workbook()
>>> ws = wb.active
>>> ws.title = “Titre de la feuille“
>>> ws[‘A7’] = ‘Hello World’ # Accès à la cellule A7
>>> wb.save(‘resultat.xlsx’)

180

180

90
11/03/2021

OPENPYXL / LIRE UN FICHIER EXCEL

>>> from openpyxl import Workbook


>>> wb = load_workbook(‘resultat.xlsx’)
>>> print(wb.sheetnames) # Nom des feuilles
>>> ws = wb.active # Choix de la feuille active
>>> print(ws[‘B12’]) # Accès à une cellule

181

181

91

Vous aimerez peut-être aussi