10. Manipuler des fichiers

0

Dans ce chapitre nous allons voir comment lire et écrire des fichiers en Python. On va voir comment :

  • lire des fichiers texte
  • écrire un fichier texte
  • utiliser le mot clé with pour faciliter la gestion des fichier

Préparation

Pour suivre ce cours, vous devrez créer un dossier input et un dossier output dans le même dossier ou vous écrirez votre fichier de code Python (main.py). Dans le dossier input il faudra que vous écriviez un fichier sample.txt contenant plusieurs lignes de texte.

Si vous souhaitez avoir le même résultat que ceux illustrés dans les exercices ci-dessous, vous pouvez copier le contenu du fichier que vous retrouverez ci-dessous :

input/sample.txt
Lorem ipsum dolor sit amet,
consectetur adipiscing elit,
sed do eiusmod tempor incididunt
ut labore et dolore magna aliqua.

La lecture et l’écrire de fichiers texte

La lecture ou écriture d’un fichier, ce passe toujours en trois étapes. Tout d’abord il faut ouvrir le fichier, ensuite on peut y accéder en lecture ou en écriture, et pour finir il faut fermer le fichier afin de libérer les ressources du système et de s’assurer que le contenu du fichier a bien été stocké sur le disque.

Commençons par ouvrir un fichier que j’ai préalablement créé et qui contient 4 lignes de texte, pour cela on va utiliser la fonction open, qui prend un chemin relatif ou absolu en premier paramètre et le mode d’ouverture en deuxième paramètre. Avant d’essayer cette fonction expliquons ces deux paramètres.

Chemin absolu v.s. chemin relatif

Tout d’abord qu’elle est la différence entre un chemin relatif et un chemin absolu. Eh bien, un chemin absolu commence à la racine de votre système de fichier et contient le chemin complet de la racine, jusqu’au fichier que vous souhaitez ouvrir.

Imaginons qu’un fichier nommé « sample.txt » que vous souhaitez ouvrir ce trouve dans un dossier « development/cours_10/input » qui se trouve lui-même à la racine de votre disque. Sous windows le chemin absolu aurait la forme :

Windows
C://development/cours_10/input/sample.txt

Et sous Linux ou Mac le même chemin absolu aurait la forme :

Linux / Mac
/development/cours_10/input/sample.txt

Maintenant imaginons que nous nous situons dans le dossier « cours_10 » et que nous souhaitions accéder à ce même fichier, mais cette fois-ci en utilisant un chemin relatif. Un chemin relatif va indiquer la position du fichier par rapport à notre position actuelle dans l’arborescence de fichiers. Donc ici, on peut utiliser le chemin relatif suivant, indépendamment de notre système d’exploitation :

Windows / Linux / Mac
input/sample.txt

Attention ! Notez bien que le chemin relatif commence directement par le nom d’un dossier ou fichier relatif à notre position actuelle ! Attention à ne pas ajouter un / ou C:// au début du chemin, sinon vous aurez un fichier absolu et non relatif !

Mode d’ouverture de fichiers

Le deuxième paramètre de la fonction open, est le mode d’ouverture du fichier, dans cette introduction on va s’intéresser aux mode suivants :

ModeDéscriptionFonctionnement
rmode de lectureSi un fichier en lecture seule n’existe pas, vous aurez une erreur.
wmode écritureSi le fichier a écrire n’existe pas, il sera créé, et si il existe, son contenu sera écrasé.
amode append (ajout en français)Si le fichier n’existe pas, il sera créé, et si il existe, le contenu écris est ajouté à la fin du fichier.

A noter que si on souhaite lire et écrire, ou lire et ajouter du texte à un fichier, on peut combiner les modes et ouvrir le fichier avec les modes « rw » ou « ra », selon notre cas d’usage.

Pour ouvrire le fichier « input/sample.txt » en lecture seule, nous pouvons donc faire la chose suivante :

main.py
sample_file_path = "input/sample.txt"

sample_file = open(sample_file_path, "r")

Fermeture du fichier

Tout fichier ouvert, doit être refermé une fois que nous n’en avons plus besoin, afin d’éviter des corruptions et de libérer les resources systèmes. Pour cela, on peut utiliser la méthode close. Ajoutons donc tout de suite, afin de ne pas l’oublier !

main.py
sample_file_path = "input/sample.txt"

sample_file = open(sample_file_path, "r")
sample_file.close()

Lecture de fichiers

Une fois notre fichier ouvert, nous allons pouvoir lire son contenu, pour cela nous pouvons utiliser différentes méthodes. La méthode read, permet ainsi de charger le contenu entier du fichier dans une variable de type string. De son côté, la méthode readline permet de lire le contenu du fichier ligne après ligne, chaque appel à readline retournant la prochaine ligne du fichier. Pour finir la méthode readlines, permet de lire toutes les lignes du fichiers et de les retourner sous forme de tableau de string, ou chaque élément du tableau contient une ligne du fichier.

Pour lire le contenu entier de notre fichier sample.txt, on peut donc faire la chose suivante :

main.py
sample_file_path = "input/sample.txt"

sample_file = open(sample_file_path, "r")

full_content = sample_file.read()
print(full_content)

sample_file.close()

Si on execute ce programme, on voit bien qu’on a tout le contenu du fichier sample.txt dans la variable full_content :

Si on souhaite lire les lignes l’une après l’autre avec readline, on peut faire :

main.py
sample_file_path = "input/sample.txt"

sample_file = open(sample_file_path, "r")

line = sample_file.readline()
while line:
    print(line)
    line = sample_file.readline()

sample_file.close()

Ce qui nous donne le résultat suivant :

Ici, on voit qu’on a une ligne vide entre chaque ligne de texte, ceci est normale, le premier saut à la ligne est contenu dans ligne qu’on a lue dans le fichier, et print ajoute son propre saut à la ligne. Une petite astuce, si vous ne souhaitez pas que print rajoute un saut à la ligne, vous pouvez ajouter le paramètre end= » » à votre print comme ceci: print(line, end= » »)

Pour finir si on souhaite récupérer toutes les lignes sous forme de tableau, on peut faire la chose suivante :

main.py
sample_file_path = "input/sample.txt"

sample_file = open(sample_file_path, "r")

lines = sample_file.readlines()
print(lines)

sample_file.close()

Si on lance notre fichier main.py, on voit bien que le contenu du fichier est retourné sous forme de tableau :

Écriture de fichiers

Pour écrire un fichier, nous pouvons utiliser la méthode write, qui prend une chaine de caractères à écrire dans le fichier.

Attention : si vous souhaitez ajouter des sauts à la ligne dans votre texte, vous devez les ajouter par vous-même en utilisant le caractère spécial \n

En mode écriture (« w »), nous pouvons écrire du contenu dans un fichier de la manière suivante :

main.py
output_write_path = "output/sample_write.txt"
sample_write_file = open(output_write_path, "w")

sample_write_file.write("Bonjour ! ")
sample_write_file.write("Ceci est un fichier texte.\n")
sample_write_file.write("Ceci est une deuxième ligne.")

sample_write_file.close()

En mode écriture, nous pouvons relancer votre programme autant de fois que nous le désirons, et le fichier sera écrit, puis écrasé et ré-écrit avec notre contenu. Le contenu du fichier output/sample_write.txt, restera toujours inchangé et contiendra le texte suivant :

Écrivons maintenant un fichier en mode append (« a ») comme ceci :

main.py
output_append_path = "output/sample_append.txt"
sample_append_file = open(output_append_path, "a")

sample_append_file.write("Bonjour ! ")
sample_append_file.write("Ceci est un fichier texte.\n")
sample_append_file.write("Ceci est une deuxième ligne.")

sample_append_file.close()

Maintenant si nous exécutons notre code trois fois, on se retrouve avec le texte ci-dessus trois fois à la suite dans notre fichier :

Le mot clé with

Comme on le disait à l’instant, oublier de fermer un fichier, peut bloquer l’accès au fichier, ou encore créer un fichier incomplet ou corrompu. Pour éviter cela on peut utiliser un context manager, qui va se charger de fermer le fichier à notre place, et ça même en cas d’exception lors de l’execution de notre code. En Python on peut utiliser un contexte manager en utilisant le mot clé with. Le mot clé with s’utilise de la manière suivante :

with open(<file_name>, <mode>) as <variable_name>:

En résumé l’instruction commence par le mot clé with, suivi par l’opération d’ouverture de fichier, ensuite on a le mot clé as, et ensuite on défini le nom de la variable qui va contenir l’objet représentant notre fichier.

Si on revient à notre exemple, on peut donc faire la chose suivante :

main.py
output_write_path = "output/sample_write.txt"
with open(output_write_path, "w") as sample_write_file:
    sample_write_file.write("Bonjour ! ")
    sample_write_file.write("Ceci est un fichier texte.\n")
    sample_write_file.write("Ceci est une deuxième ligne.")

Et si on execute ce code, le fichier sample_write.txt a bien le bon contenu, mais cette fois-ci on n’a pas du gérer la fermeture du fichier manuellement.

Et voilà, vous savez maintenant ouvrir et écrire des fichiers texte en Python. Dans le prochain chapitre on verra comment gérer des exceptions afin d’éviter que nos programmes ne crash de manière inattendue.

Laisser un commentaire