Programmer en Python Jean-Philippe Poli [email protected].

23
Programmer en Python Jean-Philippe Poli [email protected]

Transcript of Programmer en Python Jean-Philippe Poli [email protected].

Page 1: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python

Jean-Philippe [email protected]

Page 2: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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

Page 3: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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\

Page 4: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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

Page 5: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 5

Accès aux fichiers (généralités)

Page 6: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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é

Page 7: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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

Page 8: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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()

Page 9: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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!

Page 10: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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!

Page 11: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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.

Page 12: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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

Page 13: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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

Page 14: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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

Page 15: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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.

Page 16: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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.

Page 17: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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.

Page 18: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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.

Page 19: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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

Page 20: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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

Page 21: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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

Page 22: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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

Page 23: Programmer en Python Jean-Philippe Poli Jean-philippe.poli@ecp.fr.

Programmer en Python – Jean-Philippe Poli ([email protected]) 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] []