Cours d’Informatique Scientifique
Programmation en Python Cours 5/8 - partie 1
Laurent Pointal
laurent.pointal @ limsi.fr
@ laposte.net
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 2 21
v2.2
Programme de 1ère partie de la séance
● Les modules, espaces de noms
● Les fichiers
●
Localisation
●
Accès
●
Lecture - boucle de lecture
●
Écriture
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 3 21
v2.2
Espaces de noms, alpha
Chaque module définit un “espace de noms” global à ce module.
# module alpha x = 23
y = 9
l = [1,2,3]
def f(p_x):
return 3*p_x+1 Fichier alpha.py
x
23
l
[1,2,3]
f
la fonction f
y
9
Notes:
●
Les espaces de noms sont des dictionnaire: nom valeur
●
Les objets définissent aussi l’espace des noms de leurs attributs et méthodes.
●
On peut utiliser dir() sur un
espace de noms (module, valeur).
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 4 21
v2.2
Espaces de noms, beta (1/4)
L'import effectue une recopie des noms, qui référencent les mêmes données.
Fichier beta.py
# module beta x = 2
from alpha import * y = 11
l.append(4) print(f(y))
x
2
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 5 21
v2.2
Espaces de noms, beta (2/4)
L'import effectue une recopie des noms, qui référencent les mêmes données.
# module alpha x = 23
y = 9
l = [1,2,3]
def f(p_x):
return 3*p_x+1
Fichier alpha.py Fichier beta.py
# module beta x = 2
from alpha import * y = 11
l.append(4) print(f(y))
x
23
l
[1,2,3]
f
la fonction f
x
2
l f y
y
9
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 6 21
v2.2
Espaces de noms, beta (3/4)
L'import effectue une recopie des noms, qui référencent les mêmes données.
# module alpha x = 23
y = 9
l = [1,2,3]
def f(p_x):
return 3*p_x+1
Fichier alpha.py Fichier beta.py
# module beta x = 2
from alpha import * y = 11
l.append(4) print(f(y))
x
23
l
[1,2,3]
f
la fonction f
x
2
l f y
11
y
9
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 7 21
v2.2
Espaces de noms, beta (4/4)
L'import effectue une recopie des noms, qui référencent les mêmes données.
# module alpha x = 23
y = 9
l = [1,2,3]
def f(p_x):
return 3*p_x+1
Fichier alpha.py Fichier beta.py
# module beta x = 2
from alpha import * y = 11
l.append(4) print(f(y))
x
23
l
[1,2,3,4]
f
la fonction f
x
2
l f y
11
y
9
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 8 21
v2.2
Espaces de noms, gamma (1/3)
Le passage par le module permet de modifier des données partagées.
# module alpha x = 23
y = 9
l = [1,2,3]
def f(p_x):
return 3*p_x+1
Fichier alpha.py Fichier gamma.py
# module gamma import alpha x = -3
alpha.y = 5
print(alpha.f(8))
x
23
l
[1,2,3]
f
la fonction f
y
9
alpha
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 9 21
v2.2
Espaces de noms, gamma (2/3)
Le passage par le module permet de modifier des données partagées.
# module alpha x = 23
y = 9
l = [1,2,3]
def f(p_x):
return 3*p_x+1
Fichier alpha.py Fichier gamma.py
# module gamma import alpha x = -3
alpha.y = 5
print(alpha.f(8))
x
23
l
[1,2,3]
f
la fonction f
y
9
alpha x
-3
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 10 21
v2.2
Espaces de noms, gamma (3/3)
Le passage par le module permet de modifier des données partagées.
# module alpha x = 23
y = 9
l = [1,2,3]
def f(p_x):
return 3*p_x+1
Fichier alpha.py Fichier gamma.py
# module gamma import alpha x = -3
alpha.y = 5
print(alpha.f(8))
x
23
l
[1,2,3]
f
la fonction f
y
5
alpha x
-3
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 11 21
v2.2
Espaces de noms, tout ensemble
Le passage par le module permet de modifier des données partagées.
# module alpha x = 23
y = 9
l = [1,2,3]
def f(p_x):
return 3*p_x+1
Fichier alpha.py Fichier beta.py
# module beta x = 2
from alpha import * y = 11
l.append(4) print(f(y))
Fichier gamma.py
# module gamma import alpha x = -3
alpha.y = 5
print(alpha.f(8))
x
23
l
[1,2,3,4]
f
la fonction f
x
2
l f y
11
y
5
alpha x
-3
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 12 21
v2.2
Les fichiers
Stockage permanent sur disque.
Éventuellement volumineux.
Sources diverses:
●
Saisies manuelles
●
Calculs
●
Acquisitions de données Formats divers:
●
Texte
●
Son
●
Image
●
Vidéo
●
Valeurs numériques
●
…
Identification du fichier sur disque: chemin = répertoire + nom
C:\Documents and Settings\joe\Mes documents\Images\photo.jpg /home/joe/Documents/Images/photo.jpg
Chemin d'accès absolu:
Chemin d'accès relatif au répertoire courant:
..\Images\photo.jpg
Images/photo.jpg photo.jpg
../photo.jpg
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 13 21
v2.2
Chemins de fichiers / arborescence
Mes documents\
C:\
Documents and Settings\
joe\
photo.jpg Images\
Wallpapers\
Vidéos\
Ziq\
Téléchargement\
Bureau\
Exemple sous Windows: Exemple sous Unix:
Documents/
/
home/
joe/
photo.jpg Images/
Wallpapers/
Vidéos/
Ziq/
Téléchargement/
Bureau/
.. répertoire parent
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 14 21
v2.2
Accès au fichier sur le disque
●
Une série d’octets ordonnés, sans signification a-priori
f = open("nomFichier","modeAccès",encoding="utf8")
En Python: fonction standard open() Objet fichier pour les accès
Compréhension des accents des fichiers textes.
●
"r" read (lecture, par défaut)
●
"w" write (écriture, création fichier neuf vide)
●
"a" append (ajout à la fin)
Et en plus
●
"t" texte (par défaut)
●
"b" binaire (sans interprétation des fin de ligne)
●
"+" modification (lecture+écriture)
Chemin d'accès au fichier
55 89 e5 45 f4 04 00 c9 8b c7 45 f8 05 aa c0 8f 8b 45 f8 8b …
●
Accès par le système d’exploitation
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 15 21
v2.2
Interprétation du contenu du fichier
Le mode d’accès spécifie:
●
ce que l’on peut faire avec le fichier (lire, écrire…)
●
comment les octets des données sont considérées
●
fichier binaire, manipulation de bytes (on ne verra pas)
●
fichier texte, manipulation de chaînes de caractères str
55 89 e5 45 f4 04 00 c9 8b c7 45 f8 05 aa c0 8f 8b 45 f8 8b … Au niveau du disque, on lit/écrit séquentiellement dans le fichier, à
partir d'une position qui se décale au fur et à mesure.
En mode texte, détection et conversion
●
des caractères accentués connaissance encodage
●
des fin de ligne
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 16 21
v2.2
Opérations sur les fichiers texte
Ouverture
Lecture
Écriture
Fermeture
f = open("toto.txt","r",encoding="utf-8") f = open("toto.txt","w",encoding="utf-8")
s = f.read() # tout le fichier dans s
s = f.read(25) # 25 caractères suivants dans s s = f.readline() # ligne suivante dans s
l = f.readlines() # toutes les lignes dans l
f.close()
f.write(s) # chaîne s
f.writelines(l) # liste de chaînes l
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 17 21
v2.2
Boucle sur un fichier texte
Opération très courante:
lire et traiter les lignes une par une Boucle for sur un fichier :
f = open("data.txt",encoding="utf-8") for line in f :
# Traitement de la ligne print(line)
f.close()
Boucle for sur un fichier avec n° de ligne : f = open("data.txt",encoding="utf-8") for nli,line in enumerate(f) :
# Traitement de la ligne print(nli+1,line)
f.close()
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 18 21
v2.2
Outils pour les fichiers
Plutôt que de réécrire, réutiliser !
●
Accès à l'environnement, au répertoire courant, liste de fichiers, attributs des fichiers
module os
●
Manipulations de chemins et de noms de fichiers
module os.path
●
Renommage, déplacement, copie, suppression de fichiers
module shutil
●
Liste filtrée de fichiers (*.txt)
module glob
●
Fichiers temporaires
module tempfile
●
Stockage d’objets Python (“sérialisation”)
module pickle
●
Fichiers textes colonnes avec séparateur
module csv
…
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 19 21
v2.2
Lecture/écriture de valeurs numériques
Problème très courant:
●
Un fichier texte (lisible avec un éditeur)
●
La représentation de valeurs numériques
Comment stocker et obtenir des données manipulables dans des calculs ?
11800 -0.4806 11805 -0.481994 11810 -0.48344 11815 -0.484797 11820 -0.48617
…
Exemples de formats de stockage:
Séparateur: blancs +
retours à la ligne Séparateur: virgules + retours à la ligne
11800,-0.4806 11805,-0.481994 11810,-0.48344 11815,-0.484797 11820,-0.48617
…
# Souvent aussi des lignes de commentaires à ignorer
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 20 21
v2.2
Lecture de valeurs numériques
f = open("mesures.txt","r",encoding="utf-8") donnees = []
for ligne in f :
if len(ligne)==0 or ligne[0]=='#' : continue
elements = ligne.split() x = float(elements[0])
y = float(elements[1])
donnees.append( (x,y) )
f.close()
urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 21 21
v2.2