• Aucun résultat trouvé

TP 5

N/A
N/A
Protected

Academic year: 2022

Partager "TP 5"

Copied!
4
0
0

Texte intégral

(1)

1BCPST1 TP5 Avril-Mai 2018

Mathématiques TP d’informatique n

o

5 IV – Fichiers

1o) Généralités

Tout programmeur est confronté un jour ou l’autre à la nécessité de sauvegarder des données (en grand nombre le plus souvent) dans un fichier, ou d’aller récupérer des données stockées dans un fichier. L’utilisation des fichiers en informatique s’apparente à celle d’un livre : pour lire un livre (ou écrire à l’intérieur), il faut d’abord le trouver dans la bibliothèque, et la recherche sera d’autant plus rapide (notamment lorsque la bibliothèque est grande) si un système de repérage est adopté. Une fois le livre trouvé, on peut l’ouvrir et le lire, soit de manière linéaire en commençant par le début et en le parcourant en entier, soit en allant chercher des paragraphes précis. Dans ce cas, il est possible de se repérer grâce aux numéros de pages notamment. On peut imaginer également avoir la possibilité d’écrire dans un livre, et les mêmes problèmes de repérage se posent que dans le cas de la lecture. Une fois la lecture (ou l’écriture) terminée, on referme le livre (et éventuellement on le range à sa place initiale pour le retrouver plus facilement la fois suivante).

Pour commencer, il est bon de savoir trouver quel est le répertoire de travail courant de Pyzo, et de le changer le cas échéant : ceci se fait par l’intermédiaire du moduleos. Dans ce module, nous utiliserons deux fonctions : la commandechdir(’nom de répertoire’) permet de changer de répertoire de travail, et le répertoire de travail par défaut peut être retrouvé à l’aide degetcwd().

Toutes les opérations sont ensuite possibles sur les fichiers, grâce aux commandes suivantes :

fichier=open(’nom de fichier’,’mode’) : permet d’ouvrir le fichier portant le nomnom de fichiersitué dans le répertoire courant, avec le mode d’ouverturemodequi peut prendre trois valeurs :

’a’ (comme append) : ouvre le fichier enécriturepourajouterdes données à la fin d’un fichier existant.

Si le fichier n’existait pas, il est automatiquement créé et les données ajoutées seront donc les seules contenues dans le fichier.

’w’ (comme write) : ouvre le fichier enécriturepour créer unnouveau fichieret ajouter des données en partant du début. Si le fichier existait, son contenu est automatiquement effacé et les données qui seront écrites seront les seules contenues dans le fichier.

’r’ (comme read) : ouvre le fichier enlecture, dans le but de récupérer les données qu’il contient.

fichier.write(’un joli texte ou bien des nombres mais sous forme de texte’) : permet d’écrire dans un fichier qui a été au préalable ouvert. À noter que les éventuelles variables inscrites dans un fichier doivent obliga- toirement être au format d’une chaîne de caractères (si ce sont des données numériques, il faudra donc les convertir au format string par la commandestr).

fichier.read() : permet de lire les données d’un fichier qui a été au préalable ouvert en mode lecture. Si aucun argument n’est fourni àread, l’intégralité du fichier est lue et transférée dans une variable de type chaîne de caractères. Il est possible de fournir en argument àreadun entier naturel donnant le nombre de caractères à lire à partir de la position atteinte dans le fichier (si la fin du fichier est déjà atteinte, l’instruction readrenvoie une chaîne vide).

fichier.close() : ferme le fichier en cours d’utilisation, indispensable pour qu’ensuite le fichier puisse être utilisé (pour être lu notamment).

Notons un point fondamental à ne pas oublier pour mener avec succès les lectures-écritures dans des fichiers : l’accès aux fichiers passe par la création d’une variable (un objet en réalité) sur laquelle reposent toutes les instruc- tions de lecture et d’écriture, que l’on crée à l’aide de la fonctionopen. Autre point pratique : prendre l’habitude de donner une extension.txtà vos noms de fichiers pour qu’ils soient facilement lisibles sous Windows ou di- rectement dans l’explorateur de fichiers de Pyzo.

Page 1/4

(2)

1BCPST1 TP5 Avril-Mai 2018 Avant toute chose : importer le moduleos, utiliser la fonctiongetcwdpour déterminer le répertoire de travail courant, et le changer à l’aide dechdirpour qu’il devienne U:\ Documents (voir page précédente).

Exemple 1 : A tester dans le shell : monfichier=open(’test.txt’,’w’)

monfichier.write(’Ceci est mon premier fichier, comme il est joli !’) monfichier.write(’Je peux y écrire tout ce que je veux.’)

monfichier.close()

abcd=open(’test.txt’,’a’)

abcd.write("J’ai même la possibilité d’y écrire des nombres :"+str(1)+str(-2)+str(2.4)) abcd.write("encore un peu "+" de texte")

abcd.write(str(2014)) abcd.close()

Allez jeter un œil dans le fichier créé (dans l’explorateur Windows) avant de tester les lignes ci-dessous (toujours dans le shell) :

leretourdemonfichier=open(’test.txt’,’r’) a=leretourdemonfichier.read(49)

print(a)

b=leretourdemonfichier.read(37) print(b)

c=leretourdemonfichier.read(1000) print(c)

leretourdemonfichier.close()

Observez bien la méthode pour ouvrir un fichier, y écrire puis y lire des données, et notamment le problème des données numériques. Remarquez aussi que Pyzo a la bonne idée de vous dire combien de caractères vous avez ajoutés à chaque fois au fichier.

Encore un petit test : dcba=open(’test.txt’,’w’)

dcba.write(’Ajouté ou remplacé ?’) dcba.close()

a=open(’test.txt’,’r’) chaine=a.read()

print(chaine) a.close()

EXERCICE1:Ouverture/fermeture, lecture/écriture

Créer un fichier dans votre répertoire de travail. Écrivez quelques lignes, fermez le fichier. Rouvrez-le pour ajouter d’autres lignes fondamentales, avec des nombres si cela vous chante. Créer ensuite une variable qui contienne une chaîne constituée des caractères 18 à 36 de votre fichier. Vérifiez en ouvrant votre fichier dans l’explorateur.

Terminez en trouvant une idée qui permette de déterminer le nombre de caractères présents dans votre fichier.

2o) Fichiers texte

Les chaînes ajoutées au fur et à mesure à un fichier sont mises bout à bout (sans espace ni saut de ligne). Dans le cas où on veut créer un fichier texte lisible, il est nécessaire d’insérer des sauts de ligne, grâce à la présence de

\nau sein d’une chaîne de caractères. Ceci permet ensuite de pouvoir lire les données inscrites dans le fichier ligne par ligne, grâce à la méthodereadline(), qui lit une seule ligne du fichier à partir de la position en cours (en incluant le saut de ligne), ou la méthodereadlines() qui lit toutes les lignes à partir de la position en cours et les stocke dans une liste.

Page 2/4

(3)

1BCPST1 TP5 Avril-Mai 2018 Exemple 2 : Toujours dans le shell :

var=open(’texte.txt’,’w’)

var.write(’Voilà la première ligne \n Puis la deuxième \n’)

var.write(’Et une troisième ligne \n enfin la dernière qui est la quatrième \n’) var.close()

c=open(’texte.txt’,’r’) texte=c.readline() print(texte)

texte=c.readline() print(texte)

texte=c.readlines() print(texte)

c.close()

EXERCICE2:Tables de multiplication (bis)

Créer une fonction qui stocke dans un fichier les 20 premiers multiples (non nuls) desn premiers entiers (n étant un argument de la fonction). Les multiples devront être écrits ligne par ligne dans le fichier, il devra ressembler à ce qui suit :

Table de 1 :

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 Table de 2 :

2 4 6 8 10 12 14 16 18 20 22 24 26 28 30 32 34 36 38 40 etc...

3o) Données numériques

Nous avons vu précédemment que la méthodewritene prenait en argument que des chaînes de caractère, si bien que pour stocker des valeurs numériques il faut les convertir en chaînes de caractères. Ceci est efficace pour l’écriture de données, mais pas pour la lecture : il n’est pas possible de manière simple de retrouver les variables numériques stockées, comme vous avez pu le constater dans l’exemple 1.

Dans le cas où l’on souhaite pouvoir conserver le type des variables écrites dans un fichier, il existe un module dédié à l’écriture et à la lecture : le modulepickle. Comme tout module qui n’est pas chargé au démarrage, il faut d’abord l’importer avant de pouvoir utiliser les différentes fonctionnalités. En l’occurrence, deux méthodes seront principalement concernées :

– dump(nom de variable,nom de l’objet associé à l’ouverture du fichier) : écrit le contenu de la variablenom de variabledans le fichier ;

– load(nom de l’objet associé à l’ouverture du fichier) : lit la valeur d’une variable ainsi que son type.

À noter quepickleécrit dans des fichiers binaires, et non des fichiers textes : ceci rend inutile l’extension .txt (vous ne liriez rien de compréhensible à aller fouiner dans les fichiers, mais c’est quand même rigolo d’aller jeter un œil), et impose la lettrebaccolée auwou aurlors de l’écriture/lecture dans un fichier.

Page 3/4

(4)

1BCPST1 TP5 Avril-Mai 2018 Exemple 3 : Dans le shell bien sûr :

import pickle

f=open(’essai.txt’,’wb’) pickle.dump(2.56,f)

pickle.dump([-321,’une souris verte’],f) pickle.dump(’une petite chaine’,f)

f.close()

f=open(’essai.txt’,’rb’) var=pickle.load(f)

print(var)

print(type(var)) var=pickle.load(f) print(var)

print(type(var)) var=pickle.load(f) print(var)

print(type(var)) f.close()

EXERCICE3:Tables de multiplication (ter)

En vous appuyant sur votre fonction précédemment créée, définissez une fonction qui stocke dans un fichier les listes des 10 premiers multiples (non nuls) desnpremiers entiers (nétant un argument de la fonction). Les multiples devront donc être des variables de type liste écrites dans le fichier à l’aide du modulepickle.

Remarque : Pour les plus curieux qui se demandent comment lire l’intégralité d’un fichier à l’aide depicklesans être importuné par un message d’erreur, voici une solution à étudier et comprende, voire à tester :

a=open(’fichier’,’rb’)

lire=True #variable de type booléen, qui vaut True ou False while lire: #tant qu’il est possible de lire

try: #une tentative de lecture b=pickle.load(a)

print(b)

except: #la tentative de lecture échoue lire=False

Page 4/4

Références

Documents relatifs

• Être propriétaire d'un serveur dédié implique une certaine responsabilité dans les usages qui pourraient en être fait à votre insu : piratage de la machine par un tiers

Soient M, M', M"; les trois points donnés et MP, M'P', M"P" les perpendiculaires sur la direc- tion ; on partage la droite MM' au point I en deux segments

Si on fait varier un des trois premiers coef- ficients A, B, C de l'équation (1), et regardant comme con- stants les cinq autres coefficients ; il est évident que m passe par tous

2) Représenter graphiquement la suite (laisser cette représentation graphique sur la même feuille).

2) Représenter graphiquement la suite (laisser cette représentation graphique sur la même feuille).

C'est en favorisant toutes ces EXPERIENCES que L'ECOLE permettra à l'enfant (surtout l'enfant des H.L.M.) de DEVELOPPER au maximum toutes ses POTENTIALITES :..

Si les enfants ne sont pas habitués au travail libre, plusieurs précautions sont à prendre pour les aider, éviter dt, les décourager.. qu'ils ne savent pas

Pour lancer une recherche dans un domaine qui est encore peu familier aux enfants il est souvent profitable de travailler en groupe à partir d'une fiche,