Rappels sur le traitement en table avec Python

DéfinitionLe format CSV

Le format CSV (Comma Separated Values, données avec des séparateurs) est un format de fichier universel et le plus simple à manipuler, notamment en Python. C'est aussi un format très flexible : on peut troquer la virgule contre un point virgule ou une tabulation comme séparateur de données, si celles-ci contiennent elles-mêmes des virgules (par exemple en français où la virgule peut être utilisée pour écrire des nombres décimaux).

On pourra relire cette partie du cours de SNT.

Exemple

1
Nom;Prénom;Âge;Pseudo
2
Garcia;Serge;40;sergent_garcia
3
De la Vega;Diego;17;ZoRRo
4
McDuck;Scrooge;108;Picsou

Il faut imaginer le contenu de ce fichier comme un tableau, dont les lignes sont les lignes du fichier, et les séparations entre les colonnes sont indiquées par les caractères ;.

La première ligne contient des éléments particuliers appelés descripteurs, qui indiquent quelle donnée contient la colonne correspondante.

Ici, il s'agit de Nom, Prénom, Âge et Pseudo.

Chacune des lignes suivantes contient un enregistrement, qui associe une valeur à chaque descripteur. Les valeurs sont données dans le même ordre que le sont les descripteurs dans la première ligne.

Ici, par exemple, la dernière ligne contient l'enregistrement :

MéthodeOuverture d'une table CSV en Python

Il existe 2 façons pour ouvrir un fichier en Python :

1
fichier_source = open('matable.csv','r',encoding='utf-8')

et

1
with open('matable.csv','r',encoding='utf-8') as fichier_source:

Ces 2 façons ouvre toutes les deux un fichier matable.csv en lecture seule ('r') avec un encodage en UTF-8.

La ligne de code fichier_source = open('matable.csv','r',encoding='utf-8') affecte à fichier_source un objet python fournissant une interface _io.TextIOWrapper permettant d'effectuer diverses opérations sur le fichier ouvert, dont obtenir son contenu.

La ligne with open('matable.csv','r',encoding='utf-8') as fichier_source: effectue la même affectation, mais limite la validité de l'objet fichier_source au bloc indenté immédiatement en dessous. Au delà de ce bloc, le fichier n'est plus ouvert et y accéder via fichier_source provoque une erreur d'exécution.

RemarqueAttention à la fermeture du fichier !

Lorsque l'on utilise pas de bloc with, il convient de fermer le fichier avec la méthode close() de l'objet fichier_source. Si on omet cette opération, python se charge de fermer lui-même le fichier, mais seulement lorsqu'il est certain que l'objet fichier_source n'est plus utilisé, ce qui peut être à la fin du programme.

Ces 2 codes sont donc équivalents :

1
# Premier code 
2
fichier_source = open('matable.csv','r',encoding='utf-8')
3
#des traitements
4
fichier_source.close()
5
6
# Second code
7
with open('matable.csv','r',encoding='utf-8') as fichier_source:
8
     pass #des traitements

MéthodeLecture d'une table CSV en python

Nous avons vu précédemment l'utilisation des objets reader et DictReader, on vous propose ici une méthode Python plus basique : readlines( ) qui a des avantages mais aussi de nombreux inconvénients car il conserve par exemple les sauts de lignes \n...

1
with open('matable.csv','r',encoding='utf-8') as fichier_source:
2
    mon_objet = fichier_source.readlines()

La méthode readlines() de l'objet fichier_source affecte à mon_objet un tableau de chaînes de caractères correspondant, dans l'ordre de lecture, aux différentes lignes du fichier texte ouvert dans mon_objet.

Après exécution, on aurait ici dans une console python :

1
>>> mon_objet
2
['Nom;Prénom;Âge;Pseudo\n', 'Garcia;Serge;40;sergent_garcia\n', 'De la Vega;Diego;17;ZoRRo\n', 'McDuck;Scrooge;108;Picsou\n']

À noter la présence du caractère de saut de ligne \n, qui indique le changement de ligne tout en faisant partie de la ligne.

1 enregistrement, 1 p-uplet

Chaque enregistrement du fichier CSV est un quadruplet nommé représenté en python par un dictionnaire proposant 4 clefs. Le dernier enregistrement est donc le suivant :

1
{'Nom': 'McDuck', 'Prénom': 'Scrooge', 'Âge': '108', 'Pseudo': 'Picsou'}

SyntaxeObtenir la liste des clés de l'objet sans ; et \n

La première ligne du fichier est le premier élément du tableau mon_objet.

1
premiere_ligne = mon_objet[0]
2
print(premiere_ligne)

Cette première ligne contient le saut de ligne '\n' que l'on voit en imprimant quelques caractères dessous. On peut utiliser la méthode rstrip() pour le supprimer.

1
premiere_ligne = mon_objet[0]
2
print(premiere_ligne)
3
print('--')
4
chaine_des_descr = premiere_ligne.rstrip()
5
print(chaine_des_descr)
6
print('--')

Le résultat obtenu ressemble à cela :

1
Nom;Prénom;Âge;Pseudo

... que l'on peut découper pour obtenir une liste avec la méthode split() :

1
liste_clefs = chaine_des_descr.split(';')

ou en combinant les méthodes :

1
liste_clefs = mon_objet[0].rstrip().split(';')

Ainsi, on obtient :

1
['Nom', 'Prénom', 'Âge', 'Pseudo']