Dans le TD précédent, vous avez géré un stock de CD. Cependant, ce stock était dans une variable qui avait la même valeur initiale à chaque exécution. Cela pose un problème si l'on exécute le programme plusieurs fois : si on le lance une première fois pour acheter 3 cds, puis une deuxième fois, le stock est le même qu'à l'état initial c'est à dire que l'achat précédent n'a pas été pris en compte. Stocker des valeurs de façon permanente, d'une exécution à l'autre, est la notion de persistance. Une façon de résoudre ce problème est de stocker les valeurs dans un fichier de votre répertoire.
Nota Pour simplifier, nous manipulerons dans ce TD seulement des fichiers contenant des chaines de caractères. Si ces chaines de caractères représentent des entiers ou des flottants, il faudra utiliser les fonctions de conversion float ou int.
import os
# affiche le nom du répertoire courant
repertoire = os.getcwd()
print("répertoire courant",repertoire)
# renvoie une liste contenant le nom de tous les fichiers du répertoire courant
listeFichier = os.listdir(repertoire)
print("liste des fichiers",listeFichier)
On peut accéder à un fichier de deux façons : en lecture pour lire son contenu, en écriture pour modifier son contenu. Dans les deux cas, il faut tout d'abord ouvrir le fichier pour récupérer un flux d'entrée/sortie c'est à dire un cannal qui permet la communication entre le programme et le fichier. Ensuite, on peut effectuer des opérations de lecture ou décriture, et pour terminer, il faut fermer le flux. Les exemples suivants illustrent les fonctions élémentaires de lecture/écriture dans un fichier.
Sauver le programme suivant dans un fichier testFichier.py et exécutez-le.# Pour manipuler des fichiers en lecture/écriture
# par défaut, les fichiers sont supposés être dans le répertoire courant
# écriture
print("exemple d'écriture en ajout")
# ouvre le fichier de nom "exempleFichier" ou le créé si ce fichier n'existe pas
# et renvoie un objet pour le parcourir
# "a" signifie que l'on écrit à la fin du fichier (i.e. on "a"joute des valeurs)
obFichier = open("exempleFichier.txt","a")
# écrit des valeurs
obFichier.write("bonjour")
obFichier.write("les copains")
# pour passer à la ligne il faut mettre "\n"
obFichier.write("il fait beau\n")
obFichier.write("aujourd'hui")
# ferme le fichier (i.e. ferme le flux d'écriture)
obFichier.close()
print("liste des fichiers après écriture",os.listdir(repertoire))
# lecture
print("lecture du fichier que l'on vient de créer")
# par défaut, la fonction open ouvre le fichier en lecture
obFichier = open("exempleFichier.txt")
# on lit le fichier ligne par ligne et on l'affiche
# tant que la ligne n'est pas vide
ligne = " "
while ligne !="":
print(ligne)
ligne = obFichier.readline()
obFichier.close()
Dans un terminal, allez dans le répertoire courant d'exécution de
Python, c'est à dire dans le répertoire où se trouve
testFichier.py. Vérifiez que le fichier
"exempleFichier.txt" existe bien et affichez son contenu.
Exécutez une deuxième fois le programme testFichier.py et
affichez à nouveau le contenu de "exempleFichier.txt".# un autre exemple de manipulation des fichiers
print("exemple d'écriture en effacement")
# ouvre le fichier de nom "exempleFichier" ou le créé si ce fichier n'existe pas
# et renvoie un objet pour le parcourir
# "w" signifie "write" : on écrit au début du fichier en écrasant
# ce qu'il y avait déjà dans le fichier
obFichier = open("exempleFichier.txt","w")
# écrit des valeurs
obFichier.write("c'est la nouvelle\n valeur")
obFichier.write("du fichier \n exempleFichier")
# ferme le fichier (i.e. ferme le flux d'écriture)
obFichier.close()
Dans un terminal, regardez le contenu du fichier
"exempleFichier.txt".
Quel répertoire ? /home/helen/enseignement/algoProgCIP1/tds/td1 Les fichiers du répertoire /home/helen/enseignement/algoProgCIP1/tds/td1 sont : ['exo3.py', 'essai5-exemple.py', 'exo2.py', 'essai1.py', 'variable.py', 'exo5.py', 'exo6-v2.py', 'exo4.py', 'exo6.py', 'td1.ps'] nom du fichier .py à ouvrir : toto nom du fichier .py à ouvrir : td1.ps nom du fichier .py à ouvrir : exo6.py Il y a 3 commentaires dans le fichier /home/helen/enseignement/algoProgCIP1/tds/td1/exo6.pyAide : pour savoir si une valeur apparait dans une liste, il suffit d'utiliser la fonction in. Par exemple, si c=["il","fait","beau"], "fait" in c renvoie True tandis que "toto" in c renvoie False
open(name,encoding="iso-8859-15")
Les fichiers de caractères permettent de stocker des données de façon permanente sur la machine. Ces données peuvent être lues, écrites et modifiées. Dans tous les langages, écrire ou lire dans un fichier consiste à : 1. ouvrir un canal d'entrées/sortie en lecture ou écriture. Pour l'écriture on choisit d'écrire au début du fichier en écrasant les valeurs précédentes ou à la fin du fichier. 2. faire les opérations de lecture/écriture. 3. fermer le canal. Un opérateur spécifique permet de savoir quand on a atteint la fin du fichier.