Informatique algorithmique
Python : installation et prise en main
M1-GM
Base du présent support : cours Jean-Luc Charles & Eric Ducasse – ENSAM Bordeaux
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Les Entrées/Sorties Fichier concernent 2 types de fichiers :
· Fichier ASCII (fichier texte) : les octets représentent des caractères (code ASCII)
B ASCII délimité données séparées par un délimiteur :
espace \t ; , ...
B ASCII tabulé données séparées par des tabulations \t (export tableur) ;
B ASCII CSV Comma Separated Value (export tableur) ;
B ASCII libre format spécifique... mais lisible !
· Fichier binaire : contient des données au format binaire
B nombres entiers, flottants 32 ou 64 bits (codage IEEE754) ;
B objets applicatifs mélange de nombres et de données binaires spécifiques
à une application (images, traitement de texte, PDF...).
| | 2/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Les Entrées/Sorties Fichier
code ASCII : 1 octet = valeur décimale ∈ [0, 255] ! 1 caractère (glyphe)
· Caractères de contrôle : valeur décimale ∈ [0, 31] ∪ {127}
LF Line Feed \n new line saut de ligne
CR Carriage Return \r return retour chariot
HT Horiz. Tabulation \t tabulation tabulation
...
· ASCII 7 bits : octets de valeur décimale ∈ [32, 126]) ! caractères US
| | 3/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Les Entrées/Sorties Fichier
· ASCII 8 bits
octets de valeur décimale ∈ [127, 255] ! caractères accentués (nationaux).
· Les normes ISO-8859 pour l’ASCII 8 bits :
· Le module codecs définit les codecs Python (encoders et decoders) pour l’enco-
dage des caractères [Link]/3/library/[Link]#standard-encodings.
· Les temps modernes : l’encodage universel Unicode et l’encodage UTF-8.
| | 4/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Les Entrées/Sorties Fichier
· Exemple : ISO-8859-15 (latin9, source : [Link]/wiki/ISO_8859-15)
| | 5/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Ouverture d’un fichier : création d’un objet file
· Ouverture du fichier avec la built-in fonction open(nom, mode) :
B nom : chaîne de caractères, nom du fichier ;
B mode : chaîne de caractères, accès au fichier ;
(’r’ : read, ’w’ : write, ’a’ : append)
mode fichier accès position remarque
’r’ ASCII R début le fichier doit exister
’a’ ASCII W fin (ajout) le fichier doit exister
’w’ ASCII W début (écrasement) le fichier est créé s’il n’existe pas
en ajoutant ’b’, on précise l’accès à un fichier binaire (’rb’, ’wb’...)
B open appliquée à un fichier texte renvoie un objet de type TextIOWrapper.
· Le séparateur de ligne dans les fichiers ASCII
Gnu/Linux \n
Mac Os X \r (canal historique) puis \n
Windows \r\n
Transparent pour Python ! o n peut utiliser \n quel que soit l’OS.
| | 6/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Utilisation d’un objet file
· Principales méthodes (• : objet file)
•.read() lit tout le fichier, renvoie un str
•.read(n) lit au moins n octets, renvoie un str
•.readline() lit une ligne, renvoie un str
•.readlines() lit toutes les lignes du fichier, renvoie un objet list
•.write(s) écrit l’objet str s dans le fichier
•.writelines(lines) écrit l’objet lines (list de str) dans le fichier
•.close() ferme le fichier
•.next() renvoie la ligne suivante
•.seek(0) repositionne la lecture/écriture au début du fichier
· Un objet file est itérable :
>>> fIn = open("[Link]", "r")
>>> for ligne in fIn:
print(ligne) # une ligne est lue à chaque tour de boucle
>>> [Link]()
| | 7/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Lecture d’un fichier ASCII délimité (1/4)
· Lecture du fichier ASCII ligne par ligne avec une boucle for : [[Link]]
myFile = open("[Link]", "r") · open : ouvrir un fichier, "r" : lecture
data = [] · myFile est un objet itérable
for lu in myFile:
if lu[0] != "#":
· data : objet list vide
[Link](lu) · lu est un str (une ligne du fichier)
print(repr(lu), [Link]()) · append : méthode de la classe list
[Link]()
· split : méthode de la classe str
’0.000000e+00\t3.321566e+01\r\n’ [’0.000000e+00’, ’3.321566e+01’]
’1.700000e-01\t6.013489e+01\r\n’ [’1.700000e-01’, ’6.013489e+01’]
...
’6.800000e-01\t2.265946e+02\r\n’ [’6.800000e-01’, ’2.265946e+02’]
| | 8/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Lecture d’un fichier ASCII délimité (2/4)
· Transformer la liste de str en liste de float : fonction map [[Link]]
myFile = open("[Link]", "r")
data = []
for lu in myFile:
if lu[0] != "#":
[Link](lu)
t, T = [], []
for lu in data:
x1, x2 = map(float,[Link]()) · split : méthode de la classe str
[Link](x1)
[Link](x2)
· map : built-in function
(applique la fonction float à la liste
print("t :", t)
print("T :", T)
[Link]())
t : [0.0, 0.17, 0.34, 0.51, 0.68]
T : [33.21566, 60.13489, 115.4852, 171.0066, 226.5946]
| | 9/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Lecture d’un fichier ASCII délimité (3/4)
· Version finale [[Link]]
myFile = open("[Link]", "r") · fichier source encodé utf-8
t, T = [], [] · nom de fichier : "...."
for lu in myFile:
if lu[0] != "#":
x1,x2 = map(float,[Link]())
[Link](x1)
[Link](x2)
[Link]()
for a, b in zip(t, T): · zip : built-in function, pour combiner
m = "t:{0:7.3f} s, T:{1:7.2f} °C"
print([Link](a,b)) plusieurs listes dans une boucle
t: 0.000 s, T: 33.22 °C
t: 0.170 s, T: 60.13 °C
t: 0.340 s, T: 115.49 °C
t: 0.510 s, T: 171.01 °C
t: 0.680 s, T: 226.59 °C
| | 10/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
· Autre stratégie : bloc try pour éliminer les lignes de commentaires [[Link]]
def lire(fileName):
myFile = open(fileName, "r")
t, T = [], []
for i, lu in enumerate(myFile):
try : · si map échoue :
x1, x2 = map(float, [Link]())
[Link](x1); [Link](x2) except
except:
print("ligne <" + str(i+1) + "> invalide")
[Link]()
return t, T
if __name__ == "__main__":
t, T = lire("[Link]")
for a, b in zip(t, T):
print("t:{1:7.3f} s, T:{1:7.2f} °C".format(a, b))
ligne <1> invalide
ligne <7> invalide
t: 33.216 s, T: 33.22 °C
...
t:226.595 s, T: 226.59 °C
| | 11/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Écriture dans un fichier ASCII
· La méthode write de la classe file écrit un str dans un fichier ASCII [[Link]]
# ouverture du fichier en écriture · open : ouvrir un fichier,
fo = open("[Link]", "w") ’w’ : écriture (écrasement)
[Link]("Hello every one !\n");
for i in range(1,5): · write : méthode de la
data="{0:6.2E}\t{1:9.3E}\n".format(i*0.1,i*i) classe file
[Link](data)
[Link]() · data : chaîne formatée
# Ré-ouverture en lecture pour vérification · read : méthode de la classe
fi = open("[Link]", "r")
data = [Link]() file, lit le fichier en une
[Link]() seule fois
print(data)
Hello every one !
1.00E-01 1.000E+00
2.00E-01 4.000E+00
3.00E-01 9.000E+00
4.00E-01 1.600E+01
| | 12/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Le module matplotlib propose des outils de tracés (cf [Link] :
· look & feel "à la MatLab® "
· Gallerie impressionnante de tracés possibles : [Link]
B Tous les graphiques sont accompagnés du programme Python correspondant
B Approche par l’exemple (copier/coller/modifier...)
· Toute la doc est sur le site [Link]/[Link]
| | 13/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Exemple doc > pyplot tutorial [Link]
| | 14/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’une courbe y=f(x) [Plot_XY_21.py]
3 colonnes dans le fichier [Link] : temps (s), force (N), déplacement (m).
Le tracé "force=f(temps)" dans le premier système d’axe est fait par :
import numpy as np
import [Link] as plt
t, f, d = [Link]("[Link]", unpack = True)
[Link]() # Créer une nouvelle figure
[Link]("Force, déplacement fonction du temps")
[Link](True)
[Link]("temps [s]")
[Link](0,2.3)
[Link]("Force [N]", color="b")
[Link](0,350.0)
[Link](t, f,"o-b")
# copie du tracé dans un fichier :
[Link]("[Link]", format = "png")
[Link]()
La figure est sur la diapo suivante...
| | 15/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’une courbe y=f(x)
Le tracé complet ([Plot_XY_2.py], à droite) est fait en rajoutant les lignes :
[Link]() # second système d'axes :
[Link](0, 2.3)
[Link](0, 6.e-3)
[Link]("Déplacement", color="r")
[Link](t, d, "o-r")
| | 16/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’une courbe y=f(x) [Plot_XY_3.py]
Plusieurs graphes sur une même figure :
...
[Link]()
plt.subplots_adjust(hspace=0.5) # ajustement des espaces
[Link](211) # 2 lignes, 1 col, plot 1 : 211
[Link]("Force, déplacement fonction du temps")
[Link]([0, 2.3, 0, 350]) ; [Link](True)
[Link]("temps [s]")
[Link]("Force [N]", color="b")
[Link](t, f,"o-b")
[Link]()
[Link]([0, 2.3, 0, 6.e-3])
[Link]("Déplacement", color="r")
[Link](t, d,"o-r")
[Link](212) # 2 lignes, 1 col, plot 2 : 212
[Link]("Force fonction du déplacement", color="g")
[Link]([0, 6e-3, 0, 350.0]) ; [Link](True)
[Link]("Déplacement [m]")
[Link]("Force [N]")
[Link](d, f,"*-g")
| | 17/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’une courbe y=f(x)
| | 18/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’un histogramme [Plot_Hist_1.py]
import numpy as np
import [Link] as plt
y = [Link](1000) # tirage aleatoire uniforme dans [0,1]
print(type(y))
print([Link])
[Link](211)
[Link](y, 30, color="RoyalBlue")
y = [Link](1000) # loi normale centree reduite
[Link](212)
[Link](y, 30, color="PowderBlue")
[Link]()
couleurs : ’r’,’b’ ou 0x10AABE (Red, Green, Blue), ou couleurs HTML
<class ’[Link]’>
(1000,)
| | 19/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’un histogramme
| | 20/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’une courbe avec barres d’erreurs [Plot_ErrorBars_1.py]
import numpy as np
import [Link] as plt
x = [Link](0, 3, 10) # abscisses : 10 pts dans [0, 3]
y = [Link](-x) # ordonnées
e1 = 0.2*[Link]([Link](len(x)))
e2 = 0.2*[Link]([Link](len(x)))
# barre d"erreur Y symétrique
[Link]([0, 3, 0, 1.2])
[Link](311)
[Link](x, y, yerr=e1, fmt="go-", ecolor="b")
# barre d"erreur X symétrique
[Link]([0, 3, 0, 1.2])
[Link](312)
[Link](x, y, xerr=e1, fmt="go-", ecolor="b")
# barre d"erreur Y asymétrique
[Link]([0, 3, 0, 1.2])
[Link](313)
[Link](x, y, yerr=[e1,e2], fmt="go-", ecolor="b")
[Link]()
| | 21/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’une courbe avec barres d’erreurs
| | 22/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’un ’camembert’ [Plot_PieChart_1.py]
import numpy as np
import [Link] as plt
x = [4, 9, 21, 55, 30, 18]
[Link](figsize=(5,5))
L = ["Chiens", "Chats","Souris", "Pies", "Lapins", "Vers"]
[Link](x, labels=L)
[Link]()
# Labels dans les 'portions':
[Link](figsize=(5,5))
[Link](x, labels=L, autopct="%.2f %%")
[Link]()
# Explode de certaines portions:
e = [0.1, 0.2, 0, 0, 0, 0.1]
[Link](figsize=(5,5))
[Link](x, labels=L, autopct="%.2f %%", explode=e)
[Link]()
| | 23/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’un ’camembert’
| | 24/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’un nuage de points (Scatter) [Plot_Scatter_1.py]
import numpy as np
import [Link] as plt
x = [Link](1000) # 1000 tirages random (loi normale
y = [Link](1000) # centrée réduite)
[Link](x, y, s=100, c="PowderBlue")
[Link]()
sizes = 100*[Link](1000)
colors = [Link](1000)
[Link](x, y, s=sizes, c=colors)
[Link]()
| | 25/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Tracé d’un nuage de points (Scatter)
| | 26/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
LaTeX dans les Tracés [Plot_LaTeX_1.py]
from numpy import pi, arange, sin, exp
import [Link] as plt
import matplotlib as mpl
# validation de la compilation LaTeX :
[Link]["[Link]"] = True
x = arange(0., 5., .01) # x values
y = [sin(2*pi*xx)*exp(-xx) for xx in x] # liste par compréhension
# Le texte pour LaTeX est préfixé par "r" (raw) :
[Link](x, y, label=r"$\sin(2\pi x)\exp(-x)$")
[Link](x, exp(-x), label=r"$\ \exp(-x)$")
[Link](x, -exp(-x), label=r"$-\exp(-x)$")
t1 = r"$\sin(2\pi x)\exp(-x)\ \mathrm{avec\ les\ asymptotes} "
t1 += r"\pm\exp(-x)$"
[Link](t1)
[Link]()
[Link]()
| | 27/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
LaTeX dans les Tracés
| | 28/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S avec numpy v1.3
La classe ndarray du module numpy
· La classe ndarray : n-dimensional array
>>> import numpy as np · m1 : matrice de float, 2 lignes, 2 col.
>>> m1 = [Link]((2,2)) ; print(m1)· Les éléments des ndarray ne sont
[[ 0.00000000e+000 4.94944794e+173]
[ 1.93390228e-309 4.10074486e-322]] pas initialisés !
>>> print(m1[0,0], m1[0,1]) · m[i,j] renvoie l’élément ligne i, co-
0.0 4.94944794e+173
>>> m1[0,1], m1[1,1] = 2, 4 lonne j
>>> m1[0,0], m1[1,0] = 1, 3
>>> m1
array([[ 1., 2.],
[ 3., 4.]])
· Les fonctions numpy zeros et ones
>>> m1 = [Link](4) ; print(m1) · m1 : vecteur à 4 composantes
[ 0., 0., 0., 0.] · m2 : matrice 2 lignes, 3 colonnes.
>>> m2 = [Link]((2,3)) ; print(m2)
([[ 1., 1., 1.],
[ 1., 1., 1.]])
>>> type(m1)
<class ’[Link]’>
| | 29/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S avec numpy v1.3
La classe ndarray du module numpy
· La fonction array convertit un objet list en objet ndarray :
>>> L1 = [1., 2., 3.] ; L2 = [3., 4., 5.]
>>> m1 = [Link](L1)
>>> L1 is m1
False
>>> print("m1:", m1)
m1: [[ 1. 2. 3.]]
>>> m2 = [Link]([L1, L2])
>>> print(m2)
[[ 1. 2. 3.]
[ 3. 4. 5.]]
· Les attributs size et shape donnent le nombre d’éléments et la dimension et
d’un objet ndarray :
>>> [Link], [Link] · shape permet aussi de
(3, 6) redimensionner un objet
>>> [Link], [Link]
((3,), (2, 3)) ndarray
>>> [Link] = 6
>>> print(m2)
[ 1. 2. 3. 3. 4. 5.]
| | 30/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S avec numpy v1.3
La classe ndarray du module numpy
· La fonction tolist convertit un objet ndarray en objet list :
>>> m = [Link]((3,2))
>>> [Link](5)
>>> m
array([[ 5., 5.],
[ 5., 5.],
[ 5., 5.]])
>>> print(m)
[[ 5. 5.]
[ 5. 5.]
[ 5. 5.]]
>>> L = [Link]() ; L
[[5.0, 5.0], [5.0, 5.0], [5.0, 5.0]]
· La fonction linspace crée un vecteur de float aux coordonnées régulièrement
espacées :
>>> [Link](0,10,5) · 5 nombres entre 0 et 10 inclus
array([ 0., 2.5, 5., 7.5, 10.]) Attention : comportement différent de
range ou de [Link] pour la
borne supérieure.
| | 31/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S avec numpy v1.3
La classe ndarray du module numpy
· Indexation des objets ndarray -> comme les objets list :
>>> m2 = [Link]([[ 1., 2., 3.],[ 4., 5., 6.]])
>>> print(m2)
[[ 1. 2. 3.]
[ 4. 5. 6.]]
>>> m2[0] · [0] 1re ligne
array([ 1., 2., 3.])
>>> m2[1] · [1] 2me ligne
array([ 4., 5., 6.])
>>> m2[0,:] · [0,:] 1re ligne, toutes les colonnes
array([ 1., 2., 3.])
>>> m2[:,0] · [:,0] toutes les lignes, 1re colonne
array([ 1., 4.])
>>> m2[:,1] · [:,1] toutes les lignes, 2me colonne
array([ 2., 5.])
>>> m2[:-1,:-1] · [:-1,:-1] toutes les lignes sauf la der-
array([[ 1., 2.]])
nière, toutes les colonnes sauf la dernière
| | 32/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Lecture/écriture d’un fichier ASCII délimité avec numpy
Fonctions loadtxt et savetxt du module numpy [[Link]]
import numpy as np
m1 = [Link]("[Link]")
print("m1:\n", m1)
m2 = [Link]("[Link]", usecols=(0,1))
print("m2:\n", m2)
m1:
[[ 0.00000000e+00 3.32156600e+00 4.34020300e-05]
[ 1.70000000e-01 6.01348900e+01 3.29935900e-04]
[ 3.40000000e-01 1.15485200e+02 9.71830100e-04]
[ 5.10000000e-01 1.71006600e+02 1.32835300e-03]
[ 6.80000000e-01 2.26594600e+02 1.85442800e-03]]
m2:
[[ 0.00000000e+00 3.32156600e+00]
[ 1.70000000e-01 6.01348900e+01]
[ 3.40000000e-01 1.15485200e+02]
[ 5.10000000e-01 1.71006600e+02]
[ 6.80000000e-01 2.26594600e+02]]
| | 33/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Lecture/écriture d’un fichier ASCII délimité avec numpy
Fonctions loadtxt et savetxt du module numpy [[Link]]
from numpy import *
t1, c1, d1 = loadtxt("[Link]", unpack=True)
print("temps :", t1)
print("force :", c1)
print("dépl. :", d1)
print("\nLecture avec usecols=(0,2) :")
t2, d2 = loadtxt("[Link]", usecols=(0,2), unpack=True)
print("temps :", t2)
print("dépl. :", d2)
temps : [ 0. 0.17 0.34 0.51 0.68]
force : [ 3.321566 60.13489 115.4852 171.0066 226.5946 ]
dépl. : [ 4.34020300e-05 3.29935900e-04 ... 1.32835300e-03 1.85442800e-03]
Lecture avec usecols=(0,2) :
temps : [ 0. 0.17 0.34 0.51 0.68]
dépl. : [ 4.34020300e-05 3.29935900e-04 ... 1.32835300e-03 1.85442800e-03]
| | 34/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Lecture/écriture d’un fichier ASCII délimité avec numpy
Fonctions loadtxt et savetxt du module numpy [[Link]]
from numpy import *
def read(fileName): # fonction pour relire
print("fichier <"+fileName+"> : ") # et afficher un fichier.
print(loadtxt(fileName))
return
# 9 points dans [1., 10.] et dans [1., 2.]
a1, a2 = linspace(1,10,9), linspace(1,2,9)
[Link] = (3,3)
savetxt("[Link]", a1, fmt="%f")
read("[Link]")
[Link] = 9
savetxt("[Link]",transpose([a1,a2]),fmt="%12.6e",delimiter="\t")
read("[Link]")
fichier <[Link]> : fichier <[Link]> :
[[ 1. 2.125 3.25 ] [[ 1. 1. ]
[ 4.375 5.5 6.625] [ 2.125 1.125]
[ 7.75 8.875 10. ]] ...
[ 8.875 1.875]
[ 10. 2. ]]
| | 35/ 36
Fichiers ASCII Classe file Exemples E/S matplolib [Link] E/S numpy v1.3
Références bibliographiques
[Link]
[Link]/informatique/python/cours
[Link]/informatique/cours/apprenez-a-programmer-en-python
Apprenez à programmer en Python
Vincent Le Goff Apprendre à programmer avec Python 3
Simple IT éd. (Le livre du zéro) Gérard Swinnen
ISBN 979-10-90085-03-9 Télécharger le PDF
: 25 ¤
:
Programmation en Python
Python Essential Reference
pour les mathématiques
David M. Beazley
A. Casamayou-Boucau
Addison Wesley
Dunod
ISBN 0-672-32978-4
ISBN 978-2-10-057422-3
Matplotlib for Python Developers
Sandro Tosi
PACTK publishing
ISBN 1847197906
| | 36/ 36
B [Link]@[Link]
B [Link]@[Link]