Professional Documents
Culture Documents
Les chanes sont des objets un objet offre des mthodes Les listes modifiables
Les chanes proposent diffrentes mthodes : Elles sont notes sous forme dlments entre crochets spars par des virgules.
rstrip supprime les caractres en fin de chane (par ex. le retour la ligne) Elles correspondent des objets contrairement aux tuples.
Exemple : chaine.rstrip(\n ) 1 a = [10, trois, 40]
upper passe en majuscule Les mthodes sont :
Exemple : chaine.upper() append(e) ajoute un lment e pop() enlve le dernier lment
splitlines dcompose une chane suivant les lignes et retourne une liste de lignes , sous pop(i) retire le i me lment extend concatne deux listes
forme dune liste de chane de caractres. sort trie les lments reverse inverse lordre des lments
etc. index(e) retourne la position de llment e
10.1 Les listes Exemples dutilisation 10.2 Les listes Utilisation comme pile et file
1 a = [1, deux, 3] Pour une approche algorithmique de la programmation, il est intressant de pouvoir disposer
2 a.append(quatre) des structures particulires que sont les piles et files.
3 print a La pile
[1, deux, 3, quatre] empiler ma_pile.append(element) >>> ma_pile = []
>>> ma_pile.append(sommet)
4 element = a.pop() dpiler element = ma_pile.pop() >>> ma_pile
5 print element, a [sommet]
>>> element = ma_pile.pop()
quatre [1, deux, 3]
>>> element
6 a.sort() sommet
7 print a
La file
[1, 3, deux]
enfiler ma_file.append(element) >>> ma_file = []
8 a.reverse() >>> ma_file.append(premier)
9 print a defiler element = ma_file.pop(0) >>> ma_file.append(second)
>>> element = ma_file.pop(0)
[deux, 3, 1] >>> element
premier
10 print a.pop(0)
deux Attention
Si element est une liste, alors il ne faut pas utiliser la mthode append mais extend.
10.5 Des listes comme tableau 2 dimensions 10.6 Un accs par indice aux lments dune chane
Il nexiste pas de tableau deux dimensions en Python comme dans dautres langages de pro- Et le rapport entre une liste et une chane de caractres ?
grammation. Elles bnficient de laccs par indice, par tranche et du parcours avec for :
Un tableau une dimension correspond une liste. 1 a = une_chaine
Un tableau deux dimensions correspond une liste de liste. 2 b = a[4:7] # b reoit cha
Cration et utilisation du tableau deux dimensions Pour pouvoir modifier une chane de caractre, il nest pas possible dutiliser laccs par indice :
1 nb_lignes = 5 La fonction xrange() fonctionne comme 1 a = le voiture
2 nb_colonnes = 4 la fonction range() mais elle est plus ef- 2 a[1] = a
3 tableau2D = [] ficace dans ce contexte dutilisation. Traceback (most recent call last):
4 for i in xrange(0, nb_lignes): File "<stdin>", line 1, in <module>
5 tableau2D.append([]) Laccs aux diffrentes cases du tableau TypeError: str object does not support item assignment
6 for j in xrange(0, nb_colonnes): se fait suivant chaque dimension partir
Il faut dabord convertir la chane de caractres en liste, avec la fonction list() :
7 tableau2D[i].append(0) de la position 0, suivant la notation :
1 a = list(le voiture)
8 tableau2D[2][3] = a tableau2D[ligne][colonne]
2 a[1] = a
9 tableau2D[4][3] = b
Puis, recomposer la chane partir de la liste de ses caractres :
10 print tableau2D
1 b = .join(a)
Ce qui donne : 2 print b
[[0, 0, 0, 0], [0, 0, 0, 0], [0, 0, 0, a], [0, 0, 0, 0], [0, 0, 0, b]]
la voiture
Il est possible de gnraliser des tableaux de dimensions suprieures.
18.1 Les fichiers : lecture par ligne 18.2 Les fichiers : lecture spciale et criture
Lecture dun fichier Lecture caractre par caractre
Sans argument, la mthode readline renvoie la prochaine ligne du fichier.
Lobjet de type file peut tre utilis de diffrentes manires pour effectuer la lecture dun
Avec largument n, cette mthode renvoie n caractres au plus (jusqu la fin de la ligne).
fichier. Cest un objet qui peut se comporter comme une liste, ce qui permet dutiliser le for :
Pour lire exactement n caractres, il faut utiliser la mthode read.
1 for une_ligne in fichier: Avec un argument de 1, on peut lire un fichier caractre par caractre.
2 print une_ligne la fin du fichier, elle renvoie une chane vide (pas dexception).
1 while 1:
Mais galement comme un itrateur (qui lve une exception la fin) : 2 caractere = fichier.read(1)
1 while 1: 3 if not caractere : break
4 fichier.close() # ne pas oublier de fermer le fichier
2 try:
3 une_ligne = fichier.next() #renvoie lexception StopIteration en cas dchec criture dans un fichier
4 print une_ligne 1 fichier = open("lecture_fichier.txt","a") # ouverture en ajout
5 except: break 2 fichier.write(Ceci est une ligne ajoutee en fin de fichier\n)
3 fichier.close()
Autres mthodes
Ou bien simplement travers la mthode readline() :
1 while 1: read(n) lit n caractres quelconques (mme les \n) dans le fichier
fileno() retourne le descripteur de fichier numrique
2 une_ligne = fichier.readline() #renvoie une ligne avec le \n la fin
readlines() lit et renvoie toutes les lignes du fichier
3 if not une_ligne: break
tell() renvoie la position courante, en octets depuis le dbut du fichier
4 print une_ligne seek(dc,rf) positionne la position courante en dcalage par rapport la rfrence indique par 0 :
dbut, 1 : relative, 2 : fin du fichier
20 Gnration de valeurs alatoires : le module random 21 Les options en ligne de commande : le module optparse
Choix dune valeur numrique dans un intervalle Le module optparse permet de :
dfinir les options du programme et leur documentation ainsi que leur traitement :
1 #!/usr/bin/python chaque option possde une version courte ou longue, plus explicite ou verbose :
2 # coding= utf8 $ ./ma_commande.py -l mon_fichier.txt
3 import random $ ./ma_commande.py -lire-fichier=mon_fichier.txt
lors de la demande daide avec -h , chaque option dispose dune description :
5 random.seed() # initializer le gnrateur alatoire $ ./ma_commande.py -h
6 # Pour choisir alatoirement une valeur entre 1 et 2^32 Usage: ma_commande.py [options]
$ ./ma_commande.py -l mon_fichier.txt -c Il est alors possible de consulter la valeur des variables ou dappeler des fonctions etc.
{conversion: True, nom_fichier: mon_fichier.txt}
22.1 Dbogage avec le module pdb , Python Debugger 22.2 Surveiller lexcution, la journalisation : le module logging
On peut lancer un programme Python en activant le dbo- pef@darkstar:~$ python -m pdb tester_dbg.py Le jogging permet dorganiser les sorties de suivi et derreur dun programme :
gueur : > /home/pef/tester_dbg.py(3)<module>()
plus efficace quun print : on peut rediriger les sorties vers un fichier ;
-> compteur = 0
$ python -m pdb mon_programme.py
(Pdb) next plus facile dsactiver dans le cas o le debogage nest plus ncessaire ;
Les commandes sont les suivantes : > /home/pef/tester_dbg.py(4)<module>() contrlable suivant un niveau plus ou moins dtaill :
n next passe linstruction suivante
-> for i in range(1,10):
logging.CRITICAL Lorsquun niveau est activ, automatiquement
(Pdb) n
logging.ERROR ceux de niveau infrieur sont galement activs :
l list affiche la liste des instructions > /home/pef/tester_dbg.py(5)<module>()
-> compteur += 1 logging.WARNING le niveau WARNING active galement ceux INFO
b break positionne un breakpoint (Pdb) n logging.INFO et DEBUG.
ex : break tester_dbg.py:6 > /home/pef/tester_dbg.py(4)<module>()
logging.DEBUG
-> for i in range(1,10):
c continue va jusquau prochain breakpoint (Pdb) i
Dans le cours nous nous limiterons au seul niveau DEBUG.
r return continue lexcution 1
(Pdb) n
contrlable par une ligne dans le source :
jusquau retour de la fonction 1 #!/usr/bin/python
> /home/pef/tester_dbg.py(5)<module>()
Lors du dbogage, il est possible dafficher le contenu des -> compteur += 1 2 import logging
(Pdb) i
variables. 2 4 logging.basicConfig(level=logging.DEBUG)
(Pdb) l
5 ...
Il est galement possible dinsrer la ligne suivante dans un 1 #!/usr/bin/python
6 logging.debug(Ceci est un message de debogage)
programme un endroit particulier o on aimerait dclen- 2
cher le dbogage :
3 compteur = 0
$ python debogage.py Pour dsactiver le dbogage, il suffit de modifier
4 for i in range(1,10):
5 -> compteur += 1 DEBUG:root:Ceci est un message de debogage le programme en changeant la ligne 4 :
1 import pdb; pdb.set_trace() 4 logging.basicConfig()
6 print compteur
[EOF]
(Pdb) possibilit de renvoyer les sorties de dbogage vers un fichier :
4 logging.basicConfig(level=logging.DEBUG, filename=debug.log)
26 Les fonctions : dfinition & arguments Les fonctions : valeur de retour & -fonction
La dfinition dune fonction se fait laide de def : Plusieurs valeurs de retour
1 def ma_fonction(): 1 def ma_fonction(x,y):
2 #instructions 2 return x*y,x+y
Les paramtres de la fonction peuvent tre nomms et recevoir des valeurs par dfaut. Ils peuvent 3 # code principal
ainsi tre donn dans le dsordre et/ou pas en totalit (trs utile pour les objets dinterface 4 produit, somme = ma_fonction(2,3)
comportant de nombreux paramtres dont seulement certains sont changer par rapport leur 5 liste = ma_fonction(5,6)
valeur par dfaut). 6 print produit, somme
1 def ma_fonction(nombre1 = 10, valeur = 2): 7 print liste
2 return nombre1 / valeur 6 5
3 print ma_fonction() (30,11)
4 print ma_fonction(valeur = 3)
5 print ma_fonction(27.0, 4)
Une lambda expression ou un objet fonction
5.0
3.33333333333 1 une_fonction = lambda x, y: x * y
communication (A vers B, et B vers A). 3 adresse_serveur = socket.gethostbyname(localhost) # realise une requte DNS
Les changes sont buffriss : les donnes sont stockes dans une mmoire tampon jusqu ce 4 numero_port = 6688
que le systme dexploitation les envoie dans un ou plusieurs datagrammes IP. 5 ma_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
Autrement dit, il faut fermer les deux pour fermer la communication ! Attention
Ce sera cette version que vous utiliserez dans les TPs.
27.6 Programmation Socket : mode non bloquant 27.7 Programmation socket : gestion par vnement
Utilisation dune socket en mode non bloquant Le module select et sa fonction select() permet dtre averti de larrive dvnements
Une fois la socket cre, il est possible de ne plus tre bloqu en lecture lorsquil ny a pas de sur des descripteurs de fichier ou des sockets.
donnes disponibles sur la socket. Ainsi, il est possible de ne plus se bloquer en lecture, voire en criture, sur tel ou tel descripteur
1 ma_socket.setblocking(0) ou socket.
2 while 1: Ces vnements sont :
3 try : ? une demande de connexion, lorsque cela correspond une socket serveur ;
4 donnees = ma_socket.recv(1024) ? la prsence de donnes lire ;
5 except : ? la possibilit dcrire sans tre bloqu.
6 pass Il faut lui fournir en argument trois listes de descripteurs ou socket, correspondant des vne-
7 else : ments :
8 print donnees 1. en entre (lecture ou connexion), 3. exceptionnels.
Ainsi, sil ny a pas de donnes recevoir, une exception est leve. 2. en sortie,
Elle fournit en sortie trois listes mise jour, c--d ne contenant que les descripteurs pour lesquels
Attention
un vnement est survenu.
Dans ce cas l, le programme attend de manire active des donnes ! 1 import select
Vous gaspillez inutilement les ressources de la machine ! 2 (evnt_entree,evnt_sortie,evnt_exception) = select.select(surveil_entree,[],[])
Lappel la mthode select bloque tant quaucun vnement nest pas survenu.
La mthode renvoie 3 listes contenant les descripteurs pour chaque vnement.
29.2 Manipulation avances : lcriture de Script systme 29.3 Manipulations avances : construction de listes
Lorsque lon crit un programme Python destin tre utilis en tant que script systme , Il est possible dobtenir une deuxime liste partir dune premire en appliquant sur chaque
c--d comme une commande, il est important de soigner linterface avec lutilisateur, en lui lment de la premire une opration.
proposant des choix par dfaut lors de la saisie de paramtres : La deuxime liste contient le rsultat de lopration pour chacun des lments de la premire
1 #!/usr/bin/python liste.
2 import sys
3 #configuration Il est possible dobtenir le rsultat en une instruction unique pour la construction de cette
4 nom_defaut = "document.txt" deuxime liste.
5 #programme
6 saisie = raw_input("Entrer le nom du fichier [%s]" % nom_defaut) Exemple : on cherche obtenir la liste des lettres en majuscule partir des valeurs ASCII de 65
7 nom_fichier = saisie or nom_defaut (A) 91 (B) :
8 try: 1 [chr(x) for x in range(65, 91)]
9 entree = open(nom_fichier, "r") [A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P,
10 except Exception, message: Q, R, S, T, U, V, W, X, Y, Z]
11 print message
12 sys.exit(1)
. en ligne 4, on dfinie une valeur par dfaut pour le nom du fichier ouvrir ;
. en ligne 6, on saisie le nom de fichier avec, entre crochets, le nom par dfaut ;
. en ligne 7, si lutilisateur tape entre , saisie est vide, c--d fausse ;
rsultat : loprateur or affecte la valeur par dfaut, qui est vraie.