Rappels sur fichiers

Les méthodes pour manipuler les fichiers sont les suivantes.

Exercice 1 : questions de cours : fichiers

Question 1

Écrivez un petit programme Python qui crée un fichier test.txt contenant le texte "Python, c'est moins compliqué que Java.".

(Si le fichier test.txt existe déjà, il est remplacé.)

Question 2

Écrivez une procédure qui prend deux arguments : un nom de fichier et un numéro de ligne. La procédure affichera (avec print) la ligne correspondante (et seulement celle ci) du fichier.

Question 3

Écrivez une fonction qui compte le nombre de lignes présentes dans un fichier existant.

Question 4

Écrivez une procédure qui rajoute, à la fin d'un fichier existant, la ligne "Ce fichier contient n lignes.", où n est le nombre de lignes du fichier.

Exercice 2 : chaînes et fichiers

Question 1

Écrivez une fonction qui affiche la ligne la plus longue d'un fichier.

Question 2

Écrivez une procédure qui numérote les lignes non-vides d'un fichier.

Question 3

Écrivez une procédure qui transforme un fichier texte en fichier texte "double interligne" en rajoutant une ligne vide entre chaque ligne.

Question 4

Écrivez une procédure qui transforme un fichier texte en fichier texte "espace triple" en remplaçant chaque espace par trois espaces.

Question 5

Écrivez une fonction qui prend une chaine de caractères représentant une date au format américain (année/mois/jours) et qui renvoie la même date au format français (jours/mois/année).

Attention : les mois et jours peuvent être sur 1 ou deux caractères, et les années peuvent être sur 2 ou 4 caractères.

Écrivez une deuxième fonction qui renvoie la date dans un format lisible : 17 janvier 2013.

Question 6

Écrivez une procédure qui écrit la table des puissances jusqu'à n^m dans un fichier.

Après un appel à table_puissances(5, 5, "table.txt"), le fichier table.txt devra contenir

+-------+-------+-------+-------+
|   1   |   1   |   1   |   1   |
|   2   |   4   |   8   |  16   |
|   3   |   9   |  27   |  81   |
|   4   |  16   |  64   |  256  |
+-------+-------+-------+-------+

et après un appel à table_puissances(10, 7, "table.txt"), le fichier devra contenir

+-----------+-----------+-----------+-----------+-----------+-----------+
|     1     |     1     |     1     |     1     |     1     |     1     |
|     2     |     4     |     8     |    16     |    32     |    64     |
|     3     |     9     |    27     |    81     |    243    |    729    |
|     4     |    16     |    64     |    256    |   1024    |   4096    |
|     5     |    25     |    125    |    625    |   3125    |   15625   |
|     6     |    36     |    216    |   1296    |   7776    |   46656   |
|     7     |    49     |    343    |   2401    |   16807   |  117649   |
|     8     |    64     |    512    |   4096    |   32768   |  262144   |
|     9     |    81     |    729    |   6561    |   59049   |  531441   |
+-----------+-----------+-----------+-----------+-----------+-----------+

Remarques :

Question 7

On suppose qu'un fichier tableur est sauvegardé au format texte, et que les colonnes sont séparées par des virgules. (Ce format de fichiers existe : il s'appelle CSV, comme Comma Separated Values...)

Par exemple :

pizza, taille, remarque, prix (€)
fromage, normale,, 12
Vesuvio, XXL, pour les gros mangeurs, 16
quatre saisons, normale, végétarienne, 12
bambino, petite, menu enfant, 8
pizzana-split,, pizza dessert à la banane, 8

Écrivez une fonction qui prend en argument

et qui renvoie la liste des cases de la colonne correspondante à l'entier. Par exemple, sur la chaine ci-dessus, et pour l'entier 3, votre fonction renverra la liste ["prix (€)", "12", "16", "12", "8", "8"].

Remarque : il y a de nombreuses manières d'écrire cette fonction...

Question 8

On dispose d'un fichier "dictionnaire" contenant des mots, par ordre alphabétique, avec leur définition. Chaque mot défini est seul sur une ligne, et les lignes suivantes sont la définition correspondante. La fin de la définition est notée par un unique "%" sur une ligne. On passe ensuite au mots suivant. Par exemple :

ABAQUE
1- Terme d'architecture. Tailloir, partie supérieure du chapiteau des colonnes,
sur laquelle porte l'architrave.

2- Terme d'antiquité. Tableau couvert de poussière, sur lequel on traçait des
nombres et on enseignait le calcul ; et aussi sorte de carré long, évidé, qui
était muni de boules passées dans des fils tendus et qui servait à compter.
%
ABBAYE
1- Monastère d'hommes ou de filles.
2- Le bénéfice attaché au titre d'abbé.
3- Les bâtiments du monastère
%
ABEILLE
Insecte qui produit le miel et la cire, et qui appartient au genre des insectes
hyménoptères.
%
...

Écrivez une fonction cherche_definition(fichier, mot) qui cherche la définition d'un mot donné en argument dans le dictionnaire contenu dans le fichier.

Exercice 3

Il y a de nombreuses manières de parcourir les lignes d'un fichier :


f = open(fichier, "r")
lignes = f.readlines()
for i in range(len(lignes)):
    ... quelque chose avec lignes[i] ...

f = open(fichier, "r")
lignes = f.readlines()
for l in lignes:
    ... quelque chose avec l ...

f = open(fichier, "r")
l = f.readline()
while l != "":
    ... quelque chose avec l ...
    l = f.readline()

f = open(fichier, "r")
for l in f:
    ... quelque chose avec l ...

Comparez les avantages et les inconvénients de ces méthodes.