N.S.I. WorkSpace Compétence,P-Th-C,Première C1b – Compétence | Charger les données d’un fichier csv dans une table

C1b – Compétence | Charger les données d’un fichier csv dans une table

On dispose d’un fichier de données, formatées selon les normes « csv » par exemple et on souhaite les charger dans une structure de données comme une liste de listes.
Quelle est la marche à suivre dans un environnement de programmation Python ?

Soit le fichier de données formatées suivant :

csv_data.csv

Etape 1 – « Ouvrir » une ressource (flux)

csv_charge = open("csv_data.csv", mode="r", encoding="UTF-8")

Syntaxe minimaliste : ressource = open( nomDeFichier, mode=?, encoding= »? »)

Cette étape consiste à créer une ressource nommée par « nomDeFichier » sous la forme d’un flux.

« nomDeFichier » est le seul paramètre obligatoire. Il existe une valeur par défaut pour tous les autres.

  • « nomDeFichier » est de type « chaîne de caractères » (str). Il est choisi par le programmeur.
  • la paramètre mode indique un type d’accès pour le flux de données. Il peut prendre différentes valeurs :
    • « r » qui est la valeur par défaut, ouvre en lecture ;
    • « w » ouvre en écriture dans une ressource « vide » (autrement dit si « nomDeFichier » correspond à une ressource déjà existante, son contenu sera « écrasé » (= supprimé et remplacé) ;
  • le paramètre encoding prend la valeur de celui du système d’exploitation par défaut.
Pour de plus amples informations sur les paramètres, se reporter à la documentation officielle


Etape 2 – Lire dans la ressource

Lecture de tout ou partie du fichier

T = csv_charge.read(50)

Syntaxe de la méthode read() : ressource.read(taille)

Le paramètre taille est facultatif et de type entier. C’est le nombre de caractères qui seront lus et renvoyés sous la forme d’une chaîne de caractères ou d’un objet de type « bytes ».

Désérialisation des données

Cela consiste à convertir une chaine de caractères formatée selon la norme csv en liste de listes, donc une table.

L’opération peut être réalisée avec la méthode ‘T.split(separateur)’

# T : table ; initialement T est une chaîne de caractères
# se : séparateur des enregistrements ; se = chr(10) soit le caractère LF (Line Feed)
# sv : séparateur des valeurs d'un enregistrement  ; virgule ou point-virgule ou tabulation

se = chr(10)
sv = ";" # ou sv = "," ou sv = chr(9)

T = T.split(se) # T est maintenant une liste de chaîne de caractères

# nE : nombre d'enregistrements de T
nE = len(T)

for index in range(nE):
    enregistrement = T[index]
    enregistrement = enregistrement.split(sv)
    T[index] = enregistrement

Lecture de la première ligne uniquement

L = csv_charge.readline()

Syntaxe de la méthode readline() : ressource.readline()

Dans ce cas, L est de type « str » et contient tous les caractères compris jusqu’au premier ‘retour à la ligne’ (LF) inclus.
Cette méthode permet de récupérer le texte correspondant aux libellés des attributs d’une table (intitulés de colonne), si ces libellés sont présents dans le fichier csv.

Elle permet également de récupérer tous les enregistrements.

# L : liste des libellés des attributs (intitulés de colonne) ; initialement L est une chaîne de caractères
# se : séparateur des enregistrements ; se = chr(10) soit le caractère LF (Line Feed)
# sv : séparateur des valeurs d'un enregistrement  ; virgule ou point-virgule ou tabulation

se = chr(10)
sv = ";" # ou sv = "," ou sv = chr(9)

L = csv_charge.readline()
L = L.replace(se, "") # permet de supprimer le caractère de fin de ligne (LF)
L = L.split(sv)
# L est maintenant une liste de chaîne de caractères

# T : Table ; liste de listes
T = []
# E : Enregistrement de T

E = csv_charge.readline()
while E :
    E = E.replace (se, "") # permet de supprimer le caractère de fin de ligne (LF)
    E = E.split(sv)
    T.append(E)
    E = csv_charge.readline()

Lecture de toutes les lignes

T = csv_charge.readlines()

Syntaxe de la méthode readlines() : ressource.readlines()

Dans ce cas, T est de type « list ». C’est une liste de chaînes de caractères.
Cette méthode permet de construire la liste principale d’une table.

# se : séparateur des enregistrements ; se = chr(10) soit le caractère LF (Line Feed)
# sv : séparateur des valeurs d'un enregistrement  ; virgule ou point-virgule ou tabulation

se = chr(10)
sv = ";" # ou sv = "," ou sv = chr(9)

T = csv_charge.readlines()
# T : liste de chaînes de caractères

# nE : nombre d'enregistrements
for index in range(nE) :
    enregistrement = T[index]
    # enregistrement : chaîne de caractères

    enregistrement = enregistrement.replace(se,"") 
    # permet de supprimer le caractère de fin de ligne (LF)

    enregistrement = enregistrement.split(sv)
    # enregistrement : liste d'éléments

    T[index] = enregistrement
# T : liste de listes

# Si T[0] est la liste des libellés des attributs (intitulés de colonne)
# alors L : liste des libellés des attributs (intitulés de colonne)
L = T.pop(0)

Etape 3 – Fermer la ressource

csv_sauvegarde.close()

Syntaxe de la méthode close() : ressource.close()

Article sous licence << Cliquez pour plus d’informations <<