Outils pour utilisateurs

Outils du site


icn:facultatif:c_langage_python_fichier

Les fichiers

Les fichiers représentent un ensemble d'informations stockées sur un support magnétique. Leur utilisation permet de sauvegarder des données et de les exploiter, En effet, lorsque l'on ferme un programme, les données sont perdues. Or, les fichiers peuvent être, justement, un excellent moyen de garder les valeurs de certains objets pour pouvoir les récupérer quand vous rouvrirez votre programme.

Vous avez l'habitude d'utiliser des fichiers (fichiers texte, excel…), mais dans le cadre de notre formation nous allons utiliser des fichiers pour stocker des données.

Un fichier de données possède plusieurs lignes que l'on appelle enregistrements. Exemple, si je veux enregistrer un fichier des élèves qui suivent l'option ICN, ce fichier possèdera 8 enregistrements: un par élève.

Un enregistrement est divisé en champs ou rubriques ou propriétés ou colonnes. Ce sont ses caractéristiques. Par exemple dans le fichier présenté ci-dessus, un enregistrement peut être caractérisé par les champs suivants: nom de l'élève, prénom, date de naissance…

Nous allons nous intéresser particulièrement aux fichiers de type csv, c'est à dire un fichier de type tableur, dont les champs sont séparés par un caractère de ponctuation (virgule ou point-virgule par exemple)

Utilisation d'un fichier en Python

Ouverture du fichier

Pour utiliser un fichier, il faut toujours l'ouvrir. La commande est la suivante:

mon_fichier = open("test.csv", "a" ou "w" ou "r") 

Le mode est donné sous la forme d'une chaîne de caractères. Voici les principaux modes :

  • 'r' : ouverture en lecture (Read).
  • 'w' : ouverture en écriture (Write). Le contenu du fichier est écrasé. Si le fichier n'existe pas, il est créé.
  • 'a' : ouverture en écriture en mode ajout (Append). On écrit à la fin du fichier sans écraser l'ancien contenu du fichier. Si le fichier n'existe pas, il est créé.

Fermeture du fichier

Après avoir utilisé un fichier, il faut toujours le fermer. Si vous oubliez et que vous voulez ouvrir un fichier déjà ouvert, eh bien… Vous aurez des problèmes!!!

mon_fichier.close()

Lecture d'un fichier

Lecture de tout le fichier

Dans l'exemple qui suit, considérons un fichier test.csv qui contient des enregistrements. Chaque enregistrement comporte un numéro, un nom et un prénom:
12013;FAHY;Yvelise
12101;BLUM;Nicolas
12211;RIGOUT;Amandine
1010;Pasqualini;claude

Le programme pour lire tout le fichier sera le suivant:

mon_fichier = open("test.csv", "r")
contenu = mon_fichier.read()
print(contenu)
mon_fichier.close()

On ouvre le fichier en lecture, puis la variable “contenu” contient le fichier dans sa globalité que l'on peut ensuite imprimer. Enfin, on ferme le fichier.

Autre écriture pour accéder au fichier :

with open("test.csv", "r") as mon_fichier:
   contenu = mon_fichier.read()
print(contenu)

le fichier est automatiquement fermé

Lecture d'une ligne du fichier

On peut lire un fichier ligne par ligne et de plus isoler chaque colonne de la ligne qui vient d'être lue.
La méthode readline permet de lire une seule ligne du fichier.

with open("test.csv", "r") as mon_fichier:
   ligne = mon_fichier.readline()

Ici, ligne contient tous les champs de l'enregistrement qui vient d'être lu, chaque champ séparé par un point-virgule. Pour isoler chaque champ, il faut utiliser la commande split vue lors du cours sur les chaînes de caractères.

with open("test.csv", "r") as mon_fichier:
   ligne = mon_fichier.readline()
   nom = ligne.split(';')[1]
   prenom = ligne.split(';')[2]
   print(f'Mon nom est {nom} et mon prénom est {prenom}')

ligne.split(' ; ') avec l'indice i permet d'isoler le ième champ de la ligne. Il faut se rappeler que les champs sont numérotés à partir de 0.

Dans l'instruction print est utilisé un f-string. La chaîne de caractères est formatée avant affichage en remplaçant les variables indiquées entre accolades par leur contenu.

Comment lire tout le contenu du fichier ?

Il suffit d'utiliser une boucle for :

with open("test.csv", "r") as mon_fichier:
    for ligne in mon_fichier:
        nom = ligne.split(';')[1]
        prenom = ligne.split(';')[2]
        print(f'Mon nom est {nom} et mon prénom est {prenom}')

Ecriture dans un fichier

L'écriture dans un fichier permet d'ajouter une ligne dans le fichier. Vous pouvez ouvrir le fichier avec le mode w ou le mode a. Le premier écrase le contenu éventuel du fichier, alors que le second ajoute ce que l'on écrit à la fin du fichier. À vous de voir en fonction de vos besoins. Dans tous les cas, ces deux modes créent le fichier s'il n'existe pas.

Pour écrire dans le fichier, il faut utiliser la méthode write en indiquant la chaîne de caractères que l'on veut écrire. Il ne faut pas oublier le séparateur (ici le point-virgule) entre les champs ni le \n pour indiquer la fin de la ligne.

with open("test.csv", "a") as mon_fichier:
    mon_fichier.write("1010"+";"+"Pasqualini"+";"+"claude\n")

le fichier est automatiquement fermé

Utiliser le module CSV de Python

Le module Python csv facilite la lecture et l'écriture des fichiers au format CSV :

  • csv.reader permet de lire et décoder un flux CSV ;
  • csv.writer permet d'encoder et d'écrire un flux CSV

Lire un fichier CSV

import csv
with open("test.csv", "r") as mon_fichier:
    contenu = csv.reader(mon_fichier, delimiter=';')
    for ligne in contenu:
       #exploitation de la ligne
       print(f'Mon nom est {ligne[1]} et mon prénom est {ligne[2]}')

Ecrire dans un fichier CSV

import csv
with open("test.csv", "a",newline='') as mon_fichier:
    contenu = csv.writer(mon_fichier, quotechar=';')
    contenu.writerow( ("1515","Dupond","Charles") )
  • lors de l'ouverture du fichier, il faut préciser le paramètre newline='' afin de ne pas créer de ligne vide ;
  • le paramètre quotechar=';' permet de change le délimiteur virgule par défaut par celui qui est indiqué c'est à dire le point-virgule.

Gérer des dictionnaires

Python permet d'enregistrer des données d'un dictionnaire en utilisant le format JSON. Voici les mêmes données sous forme d'un tableau contenant des dictionnaires :

contenu = [ {"numéro":"12013", "nom":"FAHY", "prénom":"Yvelise"} ,
            {"numéro":"12101", "nom":"BLUM", "prénom":"Nicolas"} ,
            {"numéro":"12211", "nom":"RIGOUT", "prénom":"Amandine"}  
           ]  

La démarche à suivre :

  • le module json doit être importé dans le programme ;
  • Ce dictionnaire doit être transformé au format JSON avec la fonction json.dumps() avant enregistrement dans un fichier ;
    • lors de la lecture du fichier, son contenu doit être transformé du format JSON en dictionnaire avec la fonction json.load() ;

Ecrire dans un fichier

# coding: utf8
import json
contenu = [ {u"numéro":"12013", "nom":"FAHY", "prénom":"Yvelise"} ,
            {u"numéro":"12101", "nom":"BLUM", "prénom":"Nicolas"} ,
            {u"numéro":"12211", "nom":"RIGOUT", "prénom":"Amandine"}  
           ] 
with open("test.csv", "w") as mon_fichier:
  mon_fichier.write(json.dumps(contenu, indent=4))

Lire dans un fichier

# coding: utf8
import json
 
with open("test.csv", "r") as mon_fichier:
  contenu = json.load(mon_fichier)
print(contenu)

Retour au cours : Les instructions du langage Python

icn/facultatif/c_langage_python_fichier.txt · Dernière modification: 2019/09/26 20:47 de techer.charles_educ-valadon-limoges.fr