Introduction à la programmation Python
Introduction à la programmation Python
RHOFIR 1
Introduction Les fonctions
◦ Historique Gestion des exceptions
◦ Domaines d’application
◦ Forces et faiblesses Entrées sorties
Script et langage python ◦ stdin/stout
◦ Quelques remarques utiles ◦ fichiers
◦ Modules et packages Classes
◦ Importer Commandes systèmes et
◦ Modules utiles
modules utiles
Types de données standard ◦ Module os
◦ Types numériques
◦ Module re
◦ Séquences
◦ Chaines de caractères ◦ Module sys
◦ N-uplets et listes ◦ Module subprocess
◦ Dictionnaires Exemples
◦ sets (ou ensemble) ◦ Pages web lapp
Structures de contrôle ◦ PyROOT
◦ if/else
◦ for/while/do
Documentation
OOP -- K. RHOFIR 2
Introduction
OOP -- K. RHOFIR 3
Introduction
OOP -- K. RHOFIR 4
Introduction
Administration système
Applications Web
Extension ou scriptage de
C++/C(cPython)/Java(JyThon)/Net(IronPython)
Interfaces graphiques : usage interactif
Remplacement environnements calcul (Matlab,
IDL, …)
…
OOP -- K. RHOFIR 5
Introduction
Forces :
◦ Typage dynamique
◦ Langage de script
◦ Clarté, compacité, portabilité (multiplateforme, moins de maintenance, 5 à
10 fois moins de ligne de code que C/C++/Fortran/…)
◦ Vitesse de développement
◦ Erreurs facilement repérables : pas de pointeurs, pile d’appel des fonctions
◦ Pas de compilation : une seule erreur visible mais reste du code tourne =>
robustesse du code
◦ Grande communauté
◦ ….
Faiblesses
◦ Lenteur à l’exécution
◦ Pas de binaire compilé en natif (.pyc)
◦ Peu d’optimisation de la part de l’interpréteur
◦ Pas de vérification statique du typage
◦ Pas de multithreading (mais librairie multiprocessing)
◦ Addiction très facile
◦ …
OOP -- K. RHOFIR 6
Script et langage Python
OOP -- K. RHOFIR 7
Script et langage Python
OOP -- K. RHOFIR
a=a+1
8
Script et langage Python
OOP -- K. RHOFIR 9
Script et langage Python
OOP -- K. RHOFIR 10
Script et langage Python
OOP -- K. RHOFIR 12
Script et langage Python
Exemple :
mon_repertoire/calibration/
[Link]
__init.py__
import calibration : charge __init.py__
charge [Link] si [Link] est défini
dans __init.py__
from calibration import piedestal: charge calibration/[Link]
Ordre :
[Link]
[Link]
[Link] (si +récent que .py) ( fichier binaire créé lors d'un
import )
[Link]
__init__ de <mon_repertoire>/calibration
OOP -- K. RHOFIR 13
Script et langage Python
OOP -- K. RHOFIR 14
Types de données standards
Basiques
◦ Booléens (True ou False)
◦ Numériques
◦ Chaines de caractères
Autres
◦ Séquences
(tuple, listes, en plus des chaînes de caractères)
◦ Dictionnaires
◦ Ensembles (sets)
◦ Fonctions et méthodes
◦ Classes
Pour connaître le type d'une variable v : type(v)
OOP -- K. RHOFIR 15
Types de données standards
Opération Résultat
abs(x) Norme de x
-x Opposé de x
x%y Reste de la division entière de x par y
x/y Division de x par y
x // y Division entière de x par y
x*y Produit de x et y
x–y Différence de x et y
x+y Somme de x et y
x ** y x puissance y
OOP -- K. RHOFIR 17
Types de données standards
math :
◦ sqrt
◦ Trigonométrie et inverse
◦ Exponentielle et logarithme
◦ Arrondis
◦ Constantes e et π (pi)
◦ >>import math
◦ >>[Link](argument)
◦ ou from math import fonction et fonction(argument)
numpy : applications scientifiques
◦ Tableau : [Link]()
◦ Matrices : [Link]()
◦ Manipulations de ces objets :
Redimensionner
Concaténer
matplotlib
◦ Visualisation 2D
OOP -- K. RHOFIR 18
Types de données standards
Opération Résultat
x<y, x<=y x inférieur (ou égal) à y
x>y, x>=y x supérieur (ou égal) à y
x == y x égal? y (valeurs)
x is y Mêmes objets ?
x <> y, x != y x différent de y
x or y, x and y OU et ET logiques
x|y x ou y
x&y x et y
x^ y x ou exclusif y
~x Complément à 2 de x
x << y Décale x de y bits à gauche
x >> y Décale x de y bits à droite
OOP -- K. RHOFIR 19
Types de données standards
[Link]
Applicatif/[Link]/Formation_Python/Exos#Exo_comparais
on
OOP -- K. RHOFIR 20
Types de données standards : les séquences
2 familles :
◦ Non modifiables :
Chaines de caractères on ne peut pas modifier le contenu d'une chaine ou
d'un n-uplet en accédant à un élément par son indice
N-uplets (tuples)
◦ Modifiables : listes
Indexation
◦ a=‘tapis’
◦ a[0]=t ⇒ séquences avec indice 1er 0
◦ a[-1]=s ⇒ -1 dernier élément de la série
◦ a[2:4]=pi ⇒ tranche i, j commence au ième fini au kème-1
◦ Copie d’une chaine ou séquence avec [:]
◦ Séquence en pas : a[début:fin:pas]
OOP -- K. RHOFIR 21
Types de données standards : les séquences
Opération Résultat
x in s True si x ∈ s, False sinon
x not in s True si x ∉ s, False sinon
s+t Concaténation de s et t
s * n ou n * s Concaténation de s, n fois
s[i] ième élément de s
s[i:j] Tranche entre i et j dans s
len(s) Longueur de s
min(s) Plus petit élément de s
max(s) Plus grand élément de s
OOP -- K. RHOFIR 22
Types de données standards : les chaines de caractères
OOP -- K. RHOFIR 24
Types de données standards : les chaines de caractères
Méthode Effet
strip() Supprime les espaces en début et fin de chaine
rstrip() Supprime les espaces en fin de chaine
lstrip() Supprime les espaces en début de chaine
rjust() Justifie le texte à droite pour la largeur demandée
ljust(width) Justifie le texte à gauche pour la largeur
demandée
center(width) Centre le texte pour la largeur demandée
isspace() Renvoie True s’il n’y a que des espaces
expandtabs(tabsize) Remplace les tabulations par des espaces
OOP -- K. RHOFIR 25
Types de données standards : les chaines de caractères
Méthode Effet
upper() Remplace les minuscules par des majuscules
lower() Remplace les majuscules par des minuscules
capitalize() Passe la 1ère lettre de la chaine en majuscule et les autres
en minuscules
title() Formate comme un titre (1ère lettre de chaque mot en
majuscule, les suivantes en minuscules)
swapcase() Inverse les majuscules et minuscules
OOP -- K. RHOFIR 26
Types de données standards : les chaines de caractères
Méthode Effet
startswith(prefix) True si la chaine commence par prefix
endswith(prefix) True si la chaine se termine par prefix
isupper() True si la chaine ne contient que des majuscules
islower() True si la chaine ne contient que des minuscules
istitle() True si la chaine est formatée comme un titre
isdigit() True si la chaine ne contient que des caractères
numériques
isalpha() True si la chaine ne contient que des caractères
alphabétiques
isalnum() True si la chaine ne contient que des caractères
alphanumériques
OOP -- K. RHOFIR 27
Types de données standards : les chaines de caractères
Méthode Effet
index(sub) Renvoie l’index de la 1ère occurrence de la
chaine sub, exception si pas trouvée
rindex() Idem pour la dernière occurrence
find(sub) Comme index mais renvoie -1 si la chaine n’est
pas trouvée
rfind() Idem pour la dernière occurrence
count(sub) Retourne le nbr d’occurrence de la sous-chaine
replace(old, new [,max]) Remplace la sous-chaine old par new, au plus
max fois (par défaut, remplace toutes les
occurrences)
translate(table Supprime les caractères figurant dans
[,deletechars]) deletechar et remplace tous les autres par leur
correspondance dans table
OOP -- K. RHOFIR 28
Types de données standards : les chaines de caractères
Méthode Effet
split([sep[,max]) Crée une liste de chaine en découpant la chaîne
suivant sep au plus max fois. Par défaut split
utilise les espaces, tabulations les sauts de ligne
comme séparateur
splitlines([keepend]) Crée une liste en découpant la chaine suivant les
sauts de lignes. Ces sauts de ligne sont
conservés si keepend est True
join(list) Concatène tous les éléments de list en utilisant
la chaine comme jointure. Tous les éléments de
la liste doivent être des chaines de caractères.
OOP -- K. RHOFIR 29
Types de données standards : les chaines de caractères
Flag Signification
0 Chaine remplie de 0 à gauche
+ Mettre un ‘+’ devant les nombres positifs
⊔ Mettre un espace devant les nombres positifs
# Utiliser le format python pour notations
hexadécimales et octales
OOP -- K. RHOFIR 31
Types de données standards : les chaines de caractères
OOP -- K. RHOFIR 32
Types de données standards : N-uplets et listes
OOP -- K. RHOFIR 33
Types de données standards : N-uplets et listes
Opération Résultat
OOP -- K. RHOFIR 34
Types de données standards : N-uplets et listes
Méthode Résultat
append(x) Ajoute x en fin de liste
insert(i,x) Ajoute x à l’index i
pop(i) Retourne et supprime l’élément d’index i ou le dernier
si i non précisé
remove(x) Supprime le 1er élément de valeur x
count(x) Retourne le nombre d’occurrences de x
index(x) Retourne l’index du 1er élément de valeur x
reverse() Renverse la liste
sort([func]) Trie la liste. Une fonction de comparaison peut être
donnée
OOP -- K. RHOFIR 35
Types de données standards : N-uplets et listes
[Link]
Applicatif/[Link]/Formation_Python/Exos#Exo_Listes
OOP -- K. RHOFIR 36
Types de données standards : les dictionnaires
Méthode Effet
keys() Renvoie la liste des clefs du dictionnaires
values() Renvoie la liste des valeurs du dictionnaires
items() Renvoie la liste des couples (clefs:valeur) du
dictionnaires
has_key() Vrai si existe valeur associée à la clef k
get(k[,default]) Retourne la valeur associée à la clef k ou default si
pas de valeur
clear() Vide le dictionnaire
copy() Retourne une copie de surface du dictionnaire
update(dict) Met à jour le dictionnaire à partir d’un autre
dictionnaire
OOP -- K. RHOFIR 38
Types de données standards : les chaines de caractères
OOP -- K. RHOFIR 39
Types de données standards : les dictionnaires
[Link]
Applicatif/[Link]/Formation_Python/Exos#Exo_Dictionnaire
OOP -- K. RHOFIR 40
Types de données standard : les sets
Méthode Effet
add(elt) Ajoute un élément à l’ensemble
remove(elt) Retire un élément de l’ensemble
pop() Retire un élément au hasard de l’ensemble et le renvoie
union(s) Renvoie l’union de l’ensemble original et de s
intersection(s) Renvoie l’intersection de l’ensemble original et de s
difference(s) Renvoie la différence entre l’ensemble original et s
issubset(s) Renvoie True si l’ensemble original est un sous
ensemble de s, False sinon
issuperset(s) Renvoie True si l’ensemble original contient, False sinon
s = [Link](s2) s = s1 + s2
[Link](s2) s1 |= s2
s = [Link](s2) s = s1 & s2
S1.intersection_update(s2) s1 &= s2
s = [Link](s2) s = s1 - s2
s1.difference_update(s2) s1 -= s2
OOP -- K. RHOFIR 42
Structures de contrôle
OOP -- K. RHOFIR 43
Structures de contrôle
OOP -- K. RHOFIR 44
Structures de contrôle
liste=["janv","fev","mars",…]
for i,mois in enumerate(liste):
…
i est l'indice de l'élément
mois est la valeur de l'élément
OOP -- K. RHOFIR 46
Structures de contrôle
OOP -- K. RHOFIR 47
Structures de contrôle
[Link]
Applicatif/[Link]/Formation_Python/Exos#Exo_Structure
OOP -- K. RHOFIR 48
Les fonctions
b=1, c=2
a = fonction(b,c)
print a
OOP --
3
K. RHOFIR 49
Les fonctions
[Link]
Applicatif/[Link]/Formation_Python/Exos#Exo_Fonctions
OOP -- K. RHOFIR 50
Gestion des exceptions
OOP -- K. RHOFIR 51
Gestion des exceptions
OOP -- K. RHOFIR 52
Gestion des exceptions
Syntaxe : try:
…
…
code à tester
except erreur_1 :
si le code testé génère une erreur de type
erreur_1
except erreur_2 :
si le code testé génère une erreur de type
erreur_2
except :
si le code testé génère une autre erreur
else:
optionnel
si le code n'a pas généré d'erreur
OOP -- K. RHOFIR 55
Lecture/écriture de fichiers
[Link]
Applicatif/[Link]/Formation_Python/Exos#Exo_In.2FOut
OOP -- K. RHOFIR 57
Les classes
OOP -- K. RHOFIR 58
Les classes
OOP -- K. RHOFIR 59
Les classes
class Chat:
def __init__ (self,nom="M’sieur"):
[Link] = nom
[Link] = False
def Ronronne(self):
print "Prrrrrr !"
def Faire_Caresses(self):
"Ronronne si déjà des caresses"
if [Link]:
[Link]()
else:
[Link] = True
def Repos(self):
[Link] = False
OOP -- K. RHOFIR 60
Les classes
>>>Minou = Chat("M’sieur")
>>>print Minou.get_nom()
M’sieur
OOP -- K. RHOFIR 61
Les classes
OOP -- K. RHOFIR 62
Les classes
class MonChat(Chat):
def __init__ (self,nom="M’sieur", couleur="Roux"):
Chat.__init__(self,nom)
[Link] = couleur
OOP -- K. RHOFIR 63
Les classes
Msieur = MonChat()
print Croquettes = Msieur.Consommation_croquettes(31)
OOP -- K. RHOFIR 64
Les classes
class MonChat(Chat):
def __init__(self):
Chat()
[Link]=4
def get_consommation(self):
return [Link]*0.07
def get_consommationMere(self):
return Chat.get_consommation(self)
OOP -- K. RHOFIR 65
Les classes
[Link]
Applicatif/[Link]/Formation_Python/Exos#Exo_Classes
OOP -- K. RHOFIR 66
Les commandes système
OOP -- K. RHOFIR 67
Le module os
OOP -- K. RHOFIR 68
Le module os
Méhode Effets
getcwd() Renvoie le répertoire de travail
courant
chdir(path) Positionne le répertoire de travail
courant à path
listdir(path) Renvoie la liste du contenu du
reperoire path
walk(path) Visite récursivement path et
génère une liste de triplets
(dirpath, dirnames, filenames).
Cette fonction accepte un
argument optionnel topdown qui
permet de préciser le sens de la
visite
OOP -- K. RHOFIR 69
Le module os
OOP -- K. RHOFIR 70
Le module os
Fonctions Effets
isfile(path) Renvoie True si le chemin fait
référence à un fichier sinon False
isdir(path) Renvoie True si le chemin fait
référence à un répertoire sinon
False
join(path,*paths) Concatène tous les chemins passés
en paramètres en utilisant le
séparateur approprié en fonction
de la plateforme. Si un des
chemins est absolu, tous ceux qui
précèdent sont ignorés
normpath(path) Renvoi les chemin normalisé
équivalent à path. Tous les
séparateurs redondant sont
enlevés et les caractères de
navigation comme . ou .. sont
interprétés
OOP -- K. RHOFIR 71
Le module os
Fonctions Effets
diname(path) Renvoie le répertoire contenant path
abspath(path) Renvoie path sous forme de chemin
absolu (basé sur le répertoire de
travail courant)
getsize(path) Renvoie la taille du fichier path
getctime(path) Renvoie la date de création de path
getmtime(path) Renvoie la date de dernière
modification de path (en secondes)
walk(path,visit,arg) Visite tous les répertoires dans l’arbre
dont la racine est path. Pour chaque
répertoire, appelle visit(arg, dirname,
names) où dirname est le nom du
répertoire visité, et names la liste des
fichiers ou répertoires qui s’y
trouvent
OOP -- K. RHOFIR 72
Le module os
import os
from os import path
def simple_visit(arg,dirname, names):
for file_name in names:
file_path=[Link](dirname, file_name)
if [Link](file_path):
print '[file] : ',file_path
elif [Link](file_path):
print '[directory] : ',file_path
[Link]('/web/lapp/informatique/PYTHONFORMATION/',simple_visit,'unused')
OOP -- K. RHOFIR 73
Le module os
[Link]
Applicatif/[Link]/Formation_Python/Exos#Exo_os
OOP -- K. RHOFIR 74
Le module re
Fonctions Effet
search(regexp,string) Renvoie un MatchObject
correspondant à la recherche
match(regexp,string) Renvoie None si la chaîne ne
correspond pas et un MatchObject
sinon
findall(regexp,string) Renvoie une liste de tous les
éléments trouvés
sub(regexp,repl,string) Remplace toutes les sous-chaînes
correspondant à l’expression par
repl
split(regexp, string[,maxsplit) Découpe string selon toutes les
sous-chaînes correspondant à
l’expression et renvoie la liste
obtenue
OOP -- K. RHOFIR 75
Le module re
[Link] :
>>> [Link](r"\W","abc;- def/") ['abc', ' ', ' ', 'def', ' '] abc;|-| def/|
>>> [Link](r"\W+","abc;- def/") ['abc', 'def', ' ']
r : raw string (interprétation \)
>>> [Link](r"(\W)","abc;- def/") ['abc', ';', ' ', '-', ' ', ' ', 'def', '/', ' ']
\W : tout caractère non alpha
>>> [Link](r"(\W+)","abc;- def/") ['abc', ';- ', 'def', '/', ''] numérique
[Link] :
>>> [Link]('\d*\.\d*', "24 78 67.56") ['67.56']
>>> [Link]('\d*\.?\d*', "24 78 67.56") ['24', ' ', '78', ' ', '67.56', ' ']
>>> [Link]('(\d*)\.(\d*)', "24 78 67.56 .89") [('67', '56'), (' ', '89')]
>>> [Link]('(\d*)\.?(\d*)', "24 78 67.56 .89") [('24', ' '), (' ', ' '), ('78', ' '), (' ', ' '), ('67', '56'),
('', ''), ('', '89'), ('', '')]
[Link] :
>>> m = [Link](r"(?P<first_name>\w+) (?P<last_name>\w+)", "Malcom
Reynolds") >>> [Link]('first_name') 'Malcom'
>>> [Link]('last_name') 'Reynolds'
import sys
print "Bienvenue à la "+[Link][1]+" "+[Link][2]
[Link](*popenargs, **kwargs)
[Link](["ls","-lRt"])
sCommand=" prog -v --report /tmp/[Link] foo bar "
[Link]([Link](''"))
"LHCb":{
"relPublished":{'Boole': ['v12r10', 'v14r7', 'v14r8'], 'Brunel':……………..}
import sys,os,time
import commands
import TestJobs Construction page
import SiteTestDictionary
……… web LHCb (même
sDataDict = [Link]["LHCb"]
lSoftList=sDataDict["softlist"] chose Atlas)
print lSoftList
OOP -- K. RHOFIR 82
Exemple : calibration Atlas
CastorLArmonFiles[(partition,runnumber,job_type,sous_détecteur)]
donne directement la liste des fichiers disponibles
OOP -- K. RHOFIR 83
Exemple de PyROOT
Versions de ROOT:
◦ /grid_sw/lhcb/lib/lcg/external/root
Versions de python:
◦ /grid_sw/lhcb/lib/lcg/external/python
setenv ROOTSYS
/grid_sw/lhcb/lib/lcg/external/root/<VERSION>/<CMTCONFIG>/root
setenv PYTHONDIR
/grid_sw/lhcb/lib/lcg/external/Python/<VERSION>/<CMTCONFIG>/
#librairie castor
ln -s ${LCG_LOCATION}/lib/[Link] [Link].2.1
setenv LD_LIBRARY_PATH ${PWD}:${LD_LIBRARY_PATH}
OOP -- K. RHOFIR 84
Exemple de PyROOT
Module(s) à importer
◦ import ROOT
◦ from ROOT import **** (Tfile, TH1F,…)
Ouverture de fichiers
◦ Les uns à la suite des autres
input = [Link](“[Link]”)
mytree=[Link]('n1')
pas plus de 30Mo de fichiers => Mélanger les fichiers ou autre
méthode ROOT
◦ Chainer les fichiers et les ouvrir tous en même temps
chain = TChain('n1')
[Link](“[Link]”)
entries=[Link]()
OOP -- K. RHOFIR 85
Exemple de PyROOT
Ouverture à distance
◦ [Link](“rfio:[Link]”)
◦ input = [Link](“rfio:[Link]”)
Copie locale, ouverture, effacement
◦ dpns-ls -l /dpm/[Link]/home/.../[Link]
◦ rfcp /dpm/in2p3/home/.../[Link] ./[Link]
Plus efficace d’ouvrir les fichiers à distance depuis
lappsl4
Même chose si job est sur le cluster du Lapp
OOP -- K. RHOFIR 86
Exemple de PyROOT
fNewFile = TFile("Name","Create,Recreate,…")
fNewTree=TTree("Name", "Name")
sBranch_struct="struct cluster_t{\
Int_t size;\
Float_t eX[SIZE];\
};"
sClusters_struct=sClusters_struct.replace("SIZE",str())
[Link](sClusters_struct);
[Link]('clusters',cluster_t,'@size/I:[Link]['+str([Link])+']/F')
[Link]=[Link]
[Link]=array('f',range([Link]))
for j in range(0,[Link]):
[Link][j]=float([Link][0][0][j])
[Link]()
OOP -- K. RHOFIR 87
Page officielle : [Link]
Tutoriel : [Link]
[Link]
PyROOT :
[Link]
Bibliothèque de référence :
[Link]
Cours :
[Link]
[Link]
[Link]
OOP -- K. RHOFIR 88