Post on 04-Apr-2015
Programmer en Python
Jean-Philippe PoliJean-philippe.poli@ecp.fr
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 2
Accès aux fichiers (généralités)
Comment désigner un fichier ?
nomfichier . txtPar son nom:
nom extension
Extension Type de fichier
Images jpg, gif, png …
Documents doc, txt, xls
Données binaires bin, dat
Programmes exe
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 3
Accès aux fichiers (généralités)
Comment désigner un fichier ?
nomfichier . txtPar son nom:
nom extension
Par son chemin:
Absolu C:\répertoire1\sousrépertoire\
Relatif sousrépertoire\
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 4
Accès aux fichiers (généralités)
fichiers
Mignonne, allons voir si la roseQui ce matin avoit descloseSa robe de pourpre au Soleil,A point perdu ceste vespréeLes plis de sa robe pourprée,Et son teint au vostre pareil.
Las ! voyez comme en peu d'espace,Mignonne, elle a dessus la placeLas ! las ses beautez laissé cheoir !Ô vrayment marastre Nature,Puis qu'une telle fleur ne dureQue du matin jusques au soir !
Donc, si vous me croyez, mignonne,Tandis que vostre âge fleuronneEn sa plus verte nouveauté,Cueillez, cueillez vostre jeunesse :Comme à ceste fleur la vieillesseFera ternir vostre beauté.
00100110101010101011101010101010101010100101010101010101010101010101010101101010100010011011011110100001111010000000111111111010101010100100000111111010101010101010101010101011100100110101010101011101010101010101010101010110101010001001101010101010111001001101010101010111010101010101010101010101101010100010011010101010101110010011010101010101110101010101010101010010101010101010101010101010101010110101010001001101010101010111010101010101010101001010101010101010101010101010101011010101000100110101010101011101010101010101010100101010101010101010101010101010101101010100101010101010101010010101010101010101010101010101010110101010
Fichier texte Fichier binaire
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 5
Accès aux fichiers (généralités)
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 6
Accès aux fichiers (généralités)
Fichier exécutable (exe)
Fichier word (doc)
Fichier excel (xls)
binaire
binaire
binaire
Fichier texte brut (txt)
Fichier python (py)
texte
compliqué
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 7
Accès aux fichiers (généralités)
• Un fichier python (py) est un fichier texte Si on l’ouvre avec l’éditeur de texte brut, on peut lire le contenu
• Pourtant si je double-clique dessus, le « programme » est exécuté ??
Table d’association des applications / type de fichiers.doc word.xls excel.py python (et pas idle!)
double cliquer sur un fichier word indique à Windows de démarrer Word en mode « ouverture du fichier en paramètre »Double cliquer sur un fichier python indique à python d’interpréter le fichier
• Un fichier python est donc un texte que le programme python interprète à la volée: on parle de script et non pas de programme
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 8
Accès aux fichiers (en python)
Ouverture du fichier:
monfichier = open(nom_du_fichier,mode)
nom_du_fichier (str): l’adresse (absolue ou relative) et le nom du fichier
mode (str): un mode d’ouverture parmi w, r, a
monfichier (file): un objet représentant le fichier ouvert
Exception levée: IOError
Fermeture du fichier:
monfichier.Close()
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 9
Accès aux fichiers (en python)
Attention, si vous employez des adresses relatives, vous devez spécifier un répertoire courant, à partir duquel le cheminement vers le fichier va se faire.
from os import chdirchdir(r’c:\tp\AlgoProg’)
Notez l’emploi du r devant l’adresse du fichier!
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 10
Accès aux fichiers (en python)
Entre l’ouverture en lecture et la fermeture, on peut lire des données:
monfichier.read() (str) retourne tout le fichier
monfichier.read(octets) (str) retourne au plus le nombre d’octets spécifiés suivants
monfichier.readline() (str) lit la ligne suivante du fichier
monfichier.readlines() (list of str) met toutes les lignes dans une liste
Ce sont toutes des fonctions donc des expressions!
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 11
Accès aux fichiers (en python)
Entre l’ouverture en écriture et la fermeture, on peut écrire des données:
monfichier.write(string) Écrit la chaîne string dans le fichier
monfichier.writelines(li) Ecrit toutes les chaînes de li (list of string) dans le fichier.
Attention, le retour à la ligne n’est pas ajouté automatiquement!
Ce sont des procédures, donc pas de retour, donc des instructions.
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 12
Programmation orientée objet
• On distingue les types de bases (int, float) des objets (str, list, dict…)
• Un objet est une entité qui regroupe:– des variables pour caractériser son état– des méthodes: instance.methode(…)
• Les objets sont des instances d’une classe
• Les listes et les dictionnaires sont des objets spéciaux
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 13
Méthodes des objets string (str)
Formatage de la chaîne de caractères S:
S.capitalize() (str) Retourne une copie de S où seule la première lettre est en majuscule
S.lower() (str) Retourne une copie de S où toutes les lettres sont en minuscules
S.upper() (str) Retourne une copie de S où toutes les lettres sont en majuscules
S.swapcase() (str) Retourne une copie de S où la casse est inversée
S.title() (str) Retourne une copie de S où tous les mots commencent par une majuscule
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 14
Méthodes des objets string (str)
Tests de la chaîne de caractères S:
S.isalnum() (bool) Retourne True si la chaîne S ne contient que des caractères alphanumériques et au moins 1 caractère. False sinon.
Cousines: isalpha, isdigit, islower, isupper, isspace
S.endswith(suffix,deb,fin) (bool) Retourne True si S termine par la chaîne suffix, False sinon.
suffix peut être un tuple avec plusieurs suffixes alternatifs.
deb et fin sont optionnels et fonctionnent comme le slicing.
Cousine: startswith
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 15
Méthodes des objets string (str)
Passage de la chaîne de caractères S en liste (et vice versa):
S.join(sequence) (str) Retourne une chaîne de caractère constituée de la concaténation des chaînes de caractères de la séquence séparées par S.
S.split(sep) (list of str) Retourne une liste de chaînes de caractères formée des mots de S séparés par la chaîne sep.
sep est optionnel: par défaut, c’est l’espace.
S.splitlines(endchar) (list of str) Retourne une liste de chaînes de caractères constituée des lignes de S.
endchar (bool) est optionnel et indique si le caractère <fin de ligne> doit être conservé ou pas.
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 16
Méthodes des objets string (str)
Recherche d’éléments dans S:
S.count(sub,deb,fin) (int) Retourne le nombre de fois que la sous-chaîne sub apparaît dans S.
deb,fin sont optionnels et fonctionnent comme le slicing.
S.find(sub,deb,fin) (int) Retourne l’indice de la première occurrence de sub dans S, -1 en cas d’erreur.
deb,fin sont optionnels et fonctionnent comme le slicing
Jumelle: index, lance ValueError au lieu de -1.
Cousine: rfind, rindex (r=reverse)
S.replace(old,new) Remplace les occurrences de la chaîne old par new.
Le module string comporte à peu près les mêmes fonctions.
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 17
Méthodes des listes (list)
Soit une liste L:
L.append(elt) Ajoute l’élément en fin de liste
L.extend(seq) Ajoute tous les éléments de seq ç la fin de L
L.insert(index,objet) Ajoute l’élément à la position index.
L.pop(index) (?) Retourne et supprime l’élément à la position index.
index est optionnel, par défaut 0.
L.remove(elt) Supprime l’élément de la liste L.
L.sort() Trie la liste L.
L.count(elt) (int) Indique le nombre d’occurrences de elt.
L.index(elt,deb,fin) (int) Retourne l’indice de la première occurrence de elt.
Deb et fin sont optionnels et se comportent comme le slicing.
L.reverse() Inverse la liste.
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 18
Méthodes sur les dictionnaires (dict)
Soit D un dictionnaire:
D.clear() Vide le dictionnaire.
D.copy() (dict) Retourne une copie du dictionnaire.
D.get(clé, default) (?) Retourne la valeur associée à clé si elle existe, sinon retourne la valeur default.
default est optionnelle, par défaut vaut None.
D.has_key(clé) (bool) Retourne True si la clé est présente, False sinon.
D.items() (list of tuple) Retourne une liste de 2-tuples clé/valeur.
D.keys() (list) Retourne la liste des clés.
D.values() (list) Retourne la liste des valeurs.
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 19
Références d’objet
• En Python, TOUT est objetex.: 1 est une instance de la classe int, une fonction ou un module
• Une variable représente un lien vers cet objet (on parle de référence)
• La référence d’un objet est son adresse en mémoirec’est ce que nous donne la fonction id()
• Chaque nombre, chaque chaîne de caractère est une instance unique
i.e.: il n’y a pas de instances de la classe int qui vaut 1
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 20
Références d’objet
• Véritable sens de l’affectation
>>> A=1 La variable A prend la valeur de la référence de l’objet 1
>>> B=A La variable B prend la valeur de la référence contenue dans la variable A, c’est-à-dire celle de l’objet 1
1objet
A
B
>>> A=A+1 La variable A prend la valeur de la référence de l’objet 2 (résultat de l’opération)
2objet
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 21
Références d’objet
• Mais alors que signifie tester l’égalité de deux objets ? Par exemple, de deux entiers ?
• Il existe deux opérateurs d’égalité d’objets
== compare valeurs par valeurs deux objetsis compare les références
Illustration sur la console interactive
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 22
Slicing (découpage)
Le slicing est une opération qui s’applique à n’importe quelle séquence. Elle permet de récupérer une partie ou la totalité d’une séquence.
La nouvelle séquence est TOUJOURS un nouvel objet (même si la sous-séquence = séquence source).
seq[indice1:indice2:pas]
ATTENTION: indice2 n’est pas compris dans le résultat!
Si indice1=indice2, cela retourne la séquence vide
Programmer en Python – Jean-Philippe Poli (jean-philippe.poli@ecp.fr) 23
Slicing (découpage)
Soit L = range(1,11)
L est la liste (une séquence) [1,2,3,4,5,6,7,8,9,10]
L[2:2] []
L[4:6] [5,6]
L[:] [1,2,3,4,5,6,7,8,9,10] (copie d’une liste)
L[1:100] [2,3,4,5,6,7,8,9,10]
L[0:10:2] [1, 3, 5, 7, 9]
L[-1] [10]
L[:-2] [1,2,3,4,5,6,7,8]
L[2:] [3,4,5,6,7,8,9,10]
L[-5:-2] [6,7,8]
L[-2:-5] []