Introduction à la programmation avec le langage Python

publicité
Introduction à la programmation
avec le langage Python
Séance 4
1. les fichiers
2. les modules
3. les exceptions
Séance
1.
les fichiers
1 : de l'idée au programe
1/4
Les fichiers sont un moyen de conserver des informations sur le disque dur.
- un programme est stocké dans un fichier .py
- le programme peut lui-même stocker les informations qu'il fabrique
sous forme de fichier
- ces informations sont le plus souvent stockées sous format texte :
les informations y sont lisibles dans n'importe
quel éditeur de texte (Microsoft Word par exemple, Notepad, Scite...)
La question récurrente est :
quelle logique (quel format) suivre pour écrire des informations ?
1.
Séance
les fichiers
1 : de: l'idée
syntaxe
au programe
2/4
Ecriture
f = open ("nom_fichier.txt","w")
f.write (...)
f.write (...)
f.close ()
Caractères spéciaux
\n passage à la ligne
\t tabulation
Fichier écrasé, augmenté
f = open ("nom_fichier.txt","a")
"w" : le fichier est écrasé s'il existe
“a" : l'écriture est faite à la fin du fichier
existant
Lecture
f = open ("nom_fichier.txt","r")
for l in f :
# l désigne une ligne
f.close ()
Caractères spéciaux
la ligne est toujours terminé par \n
pour la supprimer :
s = l.replace ("\n", "")
pour obtenir une liste lorsque
les informations sont entrecoupées
d'un séparateur
col = l.split ("\t")
Séance
1.
les fichiers
1 : de: l'idée
Excelau programe
3/4
Excel utilise son
propre format
-----.xls
Mais il est possible
d'échanger des
informations au
format texte ou csv.
1.
Séance
les fichiers
1 : de: l'idée
Excelau programe
4/4
Résultat :
Comment faire la
moyenne :
note = []
f = open ("note.txt","r")
for l in f :
s = l.replace ("\n","")
no = s.split (s,"\t")
# la note est sur la
# 3eme colonne en
# partant de 0
n = float (no [3])
note.append (n)
f.close ()
moy = sum (no) / len (no)
"Remaki" "Ines" 4 22,5
"Rouanet" "Léa" 4 24 20
"Roussel" "Pierre" 1 22
"Sarron" "Romain" 3 18
"Schmitt" "Florian" 5 23
"Shu" "Yichan" 3 17 17
"Singer" "Amandine"
7
"Sow" "Ramatoulaye"6 22
"Tang" "Xiaodong"
3 14
"Titon"
"Myriam" 7 24
"Tlili"
"Samira" 1 21
"Tracol" "Kévin"
1 23
"Trevien" "Corentin"
3
"Trigano" "Eleonore"
2
"Vidal"
"Fanny"
2 20
"Vo The" "Thu Vân" 1 14
"Xia" "Linyan" 2 24 20
"Yu"
"Jiangang"
6 24
"Zaïem"
"Meryam" 1 23
"Zghal"
"Thameur" 7 24
20 8 2
6,5 1
20 14 1
18 3 0
20 11,5
3
13 1,5
24 20 14 1
20 8,5 0
14 8 0
20 16 3
20 13 2
20 10 0
18 18 11,5
22 20 12,5
20 10 2
14 12 0
14 1
20 19 3
20 12 0
20 9 0
1
2
Séance
1.
les fichiers
1 : de: l'idée
autresauformats
programe
5/4
Les formats textes sont très répandus car ils sont lisibles sur
n'importe quel machine et dans n'importe quel éditeur :
- format csv pour Excel et tous les tableurs
- formats HTML pour les pages internet :
lorsqu'un programme informatique combine des résultats graphiques
et textuels, il peut être intéressant de créer une page internet
et de l'afficher avec Internet Explorer ou Firefox
- format XML :
HTML est un exemple de langage XML : langage à balise
ce format est utilisé par OpenOffice pour enregistrer ces fichiers
- format tex (ou latex) :
le python peut générer un fichier .tex qui peut ensuite être compilé
automatique dans un fichier PDF (format standard sur Internet)
Séance
2.
les modules
1 : de l'idée
: intérêt
au programe
1/4
1. Créer un programme dont le code est réparti sur plusieurs fichiers
--> le programme est plus lisible
2. Pouvoir réutiliser des sous partie d'un programme avec un autre
programmer sans faire de copier-coller
3. Utiliser les modules créer par d'autres personnes
Python offre un large éventail de modules
(jeux, optimisation, ...)
2.
Séance
les modules
1 : de l'idée
: pratique
au programe
2/4
module : acote.py
programme principal : main.py
"""aide associee au module"""
root = 5
import acote
def random
global
root =
12345
return
() :
root
(root * 12345 + 9875) %
root
print "reel ", acote.rnd ()
print "entier ", acote.random ()
r = acote.rien ()
def rnd () :
r = random ()
return float (r) / 12345
programme principal : main2.py
class rien :
def __init__ (rien) :
pass
from acote import *
if __name__ == "__main__" :
# test module
# ce code n'est exécuté
# que si le module est le fichier
# principal du programme
print rnd ()
print "reel ", rnd ()
print "entier ", random ()
r = rien ()
Séance
2.
les modules
1 : de l'idée
: pratique
au programe
3/4
emplacement d'un module
- le module doit être placé à côté du programme principal
- sauf s'il se trouve dans le répertoire :
C:\Python25\Lib\site-packages
- s'il est dans un autre répertoire, il faut ajouter :
import sys
sys.path.append ("c:\\temp\\module")
import acote
- liste des modules :
import sys
for m in sys.modules :
print m
- aide sur un module
import acote
help (acote) # affiche l'aide du module
copy_reg
sre_compile
locale
_sre
__main__
site
__builtin__
operator
encodings
os.path
encodings.encodings
encodings.codecs
sre_constants
re
ntpath
UserDict
nt
stat
zipimport
warnings
encodings.types
_codecs
encodings.cp1252
sys
codecs
types
_types
_locale
signal
linecache
encodings.aliases
exceptions
sre_parse
os
2.
Séance
les modules
1 : de l'idée
: internet
au programe
4/4
Exemples de modules internes (installés avec Python)
url
xmlparser
sys
Tkinter
regex
internet
lire un fichier
XML
variables systèmes
interface graphique
expression régulière
Exemples de modules externes (à télécharger depuis internet)
Scipy
Numpy
Orange
Rpy
MatPlotlib
wxPython
PyGame
PIL
psyco
calcul numérique
tableaux optimisés pour le calcul
optimisation
utilisation de R sous Python
graphes
interface graphique plus élaborée
interface graphique dédiée aux jeux
traitement d'images
pour accélérer les programmes
Précautions :
- vérifier les dépendances entre modules téléchargés
- télécharger la version du module préparée pour votre version de Python (2.5 par exemple)
Séance
2.
les modules
1 : de l'idée
: Matplotlib
au programe
, ... 5/4
Google
Matplotlib / pylab - matlab style python plotting (plots, graphs ...
http://matplotlib.sourceforge.net/
Download
Installing
Tutorial
Examples
FAQ (Frequently asked question)
Autres modules
http://www.vex.net/parnassus/
3.
Séance
les exceptions
1 : de l'idée
: objectif
au programe
1/4
Les exceptions sont apparues avec les langages objets.
C'est un moyen de rattraper les erreurs.
x = 3.0
y = 0.0
z = x / y
# erreur --> division par zero
Traceback (most recent call last):
File "temp.py", line 3, in <module>
z = x / y # erreur --> division par zero
ZeroDivisionError: float division
Avec les exceptions :
try :
x = 3.0
y = 0.0
z = x / y
# erreur --> division par zero
except :
print "une erreur s'est produite "
le programme affiche :
une erreur s'est produite
Séance
3.
les exceptions
1 : de l'idée
: types
au programe
2/4
Récupérer le message d'erreur
try :
x = 3.0
y = 0.0
z = x / y
# erreur --> division par zero
except Exception, e :
print "une erreur s'est produite : ", e
le programme affiche :
une erreur s'est produite : float division
Agir différemment selon l'erreur :
try :
x = 3.0
y = 0.0 + []
z = x / y
# erreur --> division par zero
except ZeroDivisionError, e:
print "division par zero" # en cas de division par zero
except Exception, e:
print "autre erreur : ", e # pour les autres cas
3.
Séance
les exceptions
1 : de l'idée
: lancer
au programe
3/4
Un utilisateur peut lui-même lancer une exception :
import math
def log_proba (p) :
if p < 0 or p > 1 :
raise Exception ("p n'est pas une probabilite")
return math.log (p)
try :
x = 5.0
y = log_proba (x)
except Exception, e :
print "erreur ", e
La fonction log_proba déclenche une exception lorsque le nombre reçu n'est pas
une exception.
Le résultat de la fonction log_proba est réel, il n'existe pas de valeur réelle unique
que la fonction puisse retourner en cas d'erreur --> les exceptions sont un moyen
simple de retourner une erreur.
Séance
3.
les exceptions
1 : de l'idée
: héritage
au programe
4/4
import math
Définir ses propres
exceptions peut-être
utile si on souhaite que
le message d'erreur
véhicule plus
d'information qu'un
simple message textuel.
class MonException (Exception) :
def __init__ (self, m, p) :
Exception.__init__ (self, m)
self.p = p
def __str__ (self) :
s = Exception.__str__ (self)
s += " avec " + str (self.p)
return s
def log_proba (x) :
if x < 0 or x > 1 :
raise MonException("erreur", x)
return math.log (x)
try :
x = 5
y = log_proba (x)
except Exception, e :
print e
Séance 1 : de l'idée au programe
FIN
Téléchargement