• Aucun résultat trouvé

Programmation en Python Cours 5/8 - partie 1

N/A
N/A
Protected

Academic year: 2022

Partager "Programmation en Python Cours 5/8 - partie 1"

Copied!
21
0
0

Texte intégral

(1)

Cours d’Informatique Scientifique

Programmation en Python Cours 5/8 - partie 1

Laurent Pointal

laurent.pointal @ limsi.fr

@ laposte.net

(2)

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

(3)

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).

(4)

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

(5)

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

(6)

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

(7)

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

(8)

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

(9)

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

(10)

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

(11)

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

(12)

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

(13)

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

(14)

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

(15)

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

(16)

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

(17)

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()

(18)

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

(19)

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

(20)

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()

(21)

urent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 5/8 21 21

v2.2

Écriture de valeurs numériques

f = open("mesures-2.txt","w", encoding="utf-8")

for x,y in donnees :

ligne = str(x)+" "+str(y)+"\n"

f.write(ligne) f.close()

Simple pour notre cas:

Références

Documents relatifs

Il y a tout d’abord les cahiers qui lui servent de journal intime où consigner ses rêves, mais aussi de brouillons préparatoires pour ses graffiti et même de

D’autre part, dans l’ensemble du Kérala, du pays tamoul et au Sri Lanka, il est au cœur de l’histoire de Kannaki, mais sans être davantage qu’un élément narratif :

:فظنلأا جاتنلإا او لاعفلا ءادلأا ةينقتلا هذه دعت ةدعاقل لأا جنل ةيساس ةرادلإا ماظن حا ا اهفيرعت تم ثيح ،ةيئيبل ةدحتلما مملأل يئيبلا جمانبرلا لبق نم (

À l’aide des données issues d’une enquête ethnographique et par collecte de récits de vie, conduite en France et en Belgique, auprès de cette typologie de couple,

aurent PointalDépartement Mesures Physiques Cours d’Informatique Scientifique 1/8 3

Exécuté avec variable valant tour à tour chacune des valeurs de séquence. On parle de “boucle for”, de “parcours

À chaque appel d’une fonction est mémorisé l’endroit d’où l’on vient, pour continuer l’exécution à l’instruction juste après lorsque l’on sort de la fonction...

● Si nom déjà utilisés dans le module qui importe (collision de noms). Import de tous les noms d’un