image accueil

traitement de données en tables I

Objectif :

À la fin de cette séquence vous serez capable de consulter un fichier csv.

L'échange d'informations via des fichiers texte est un moyen courant de partager des informations entre les programmes.
Avec Python, il est facile de lire des fichiers en texte brut.
Les fichiers texte sont un bon choix pour stocker en permanence des informations simples, pour un certain nombre de raisons. Premièrement, les fichiers texte sont multiplateformes : un fichier texte (brut) sur une machine Windows est le même fichier texte sur un Mac et est le même fichier texte sous Unix. Deuxièmement, les fichiers texte sont faciles à utiliser. La plupart des systèmes d'exploitation sont livrés avec des outils de base pour les afficher et les modifier.

1. Consulter un fichier texte (brut) depuis Python

Un fichier texte est un fichier dont l'extension est '.txt'

1.1. Lire et fermer un fichier texte

Pour travailler avec un fichier, il faut commencer par l'ouvrir. Et À la fin, ne pas oublier de le refermer !.

In [ ]:
fichier_txt = open("traitement.txt")
fichier_txt.close()

1.1.1. Les méthodes read, readline et readlines

Le fichier texte brute ci-après

Lire des caractères courants d'un fichier texte : La méthode read

In [ ]:
#Lire le premier caractère courant
fichier_txt = open("traitement.txt", mode="r", encoding="utf8")
print(fichier_txt.read(1))
In [ ]:
#Lire le premier caractère courant
print(fichier_txt.read(1))
In [ ]:
#Lire les premiers 8 caractères courants
print(fichier_txt.read(8))
In [ ]:
#Lire les 12 caractères courants
print(fichier_txt.readline(12))
fichier_txt.close()

Remarque : Les caractères sont lus et supprimés. On dit que fichier_txt est un itérateur.

Lire et supprimer la ligne courante du fichier texte à chaque exécution : La méthode readline

In [ ]:
fichier_txt = open("traitement.txt", mode="r", encoding="utf8")
print(fichier_txt.readline())
In [ ]:
print(fichier_txt.readline())
In [ ]:
fichier_txt.close()

Récupérer tout le fichier

In [ ]:
#Sous la forme d'une seule chaîne de caractères contenant aussi les caractères non éditables.
fichier_txt = open("traitement.txt", mode="r", encoding="utf8")
tout_str = fichier_txt.read()
fichier_txt.close()
In [ ]:
tout_str
In [ ]:
#dans une liste dont les éléments sont les lignes du fichier_txt avec leurs caractères non-éditables
fichier_txt = open("traitement.txt", mode="r")
tout_list = fichier_txt.readlines()
fichier_txt.close()
In [ ]:
tout_list
In [ ]:
for line in tout_list:
    print(line)

1.1.2. Le protocole de gestion de contexte : Context Manager

Avec le gestionnaire de context with, on n'a plus à se préoccuper de la fermeture du fichier ; elle se fait automatiquement.

In [ ]:
with open("traitement.txt", mode="r", encoding="utf8") as f:
    tout_str2 = f.read()
In [ ]:
with open("traitement.txt", mode="r") as f:
    tout_list2 = f.readlines() # tout_list2 est un itérateur
In [ ]:
tout_list2
In [ ]:
for row in tout_list2:
    print(row) #il y a un retour chariot en plus à cause de \n !

1.1.3. Parcourir un fichier texte directement avec une boucle for

In [ ]:
with open("traitement.txt", mode="r", encoding="utf8") as fichier_txt:
    for line in fichier_txt:
        print(line)
In [ ]:
 

2. Créer un fichier texte depuis Python

2.1. Mode write

In [ ]:
with open("test.txt", mode='w', encoding='utf-8') as mon_fichier_txt:
    mon_fichier_txt.write('Le méchant est un ignorant\n')
    mon_fichier_txt.write('Connais-toi toi-même\nVoici ma troisième ligne\n')
#Si mon_fichier_txt n'existe pas encore, il est créé. S'il existe, on écrase son contenu.

2.2. Ajouter des lignes dans un fichier texte : mode append

Générer, à l'aide d'un programme Python, un fichier .txt, table3.txt, contenant la table de multiplication par 3.

In [ ]:
### votre réponse ici
In [ ]:
#Utiliser les données d'un fichier pour en créer un autre

with open(r"C:\Users\tchou\OneDrive\Desktop\test2.txt", 'r', encoding='utf8') as fichier_txt: #on utilise la row string pour désactiver les \
    with open(r"C:\Users\tchou\OneDrive\Desktop\test3.txt", 'w', encoding='utf8') as fichier_txt2:
        for line in fichier_txt:
            line = line.split()# On convertit la ligne (une chaîne de caractères) en une liste de mots
            line[0] = line[0].upper()
            fichier_txt2.write(",".join(line) + '\n')#On reconstitue la ligne 

Application 1 :
On dispose d'un fichier nommé data.txt dont le contenu est le suivant :
3,5
4,7
68,001
198,77
Écrire un programme qui permet de créer un fichier, data2.txt dont le contenu est celui de data.txt mais la virgule étant remplacée par un point.

In [ ]:
### votre réponse ici

3. Importer une table depuis un fichier CSV.

Activité de découverte :

  1. L'open data, c'est quoi ?
  2. Qu’est-ce qui rend les données "ouvertes" ?
  3. Pourquoi en a-t-on besoin ?

Répondre à ces questions en suivant les liens suivants :

https://www.europeandataportal.eu/elearning/fr/module1/#/id/co-01
https://doc.data.gouv.fr/

Un fichier CSV (fichier de valeurs séparées par des virgules) est un type de fichier texte brut qui utilise une structuration spécifique pour organiser les données tabulaires. Parce qu'il s'agit d'un fichier texte brut, il ne peut contenir que des données de texte réelles, en d'autres termes, des caractères ASCII ou Unicode imprimables.

Exemple :

nom, prenom, date_naissance, classe
Durand, Jean-Pierre, 23/05/2003, Première A
Bennett, Christine, 15/12/2005, Première F
Massad, Hadjal,12/06/2004, Première D
Traoré, Aminata, 2/03/2004, Première C

En général, le caractère de séparation est appelé délimiteur et la virgule n'est pas la seule utilisée. Les autres délimiteurs courants incluent les caractères de tabulation ( \t ), deux-points ( : ) et point-virgule ( ; ). L'analyse correcte d'un fichier CSV nous oblige à savoir quel délimiteur est utilisé.

Les fichiers au format CSV peuvent être importés et exportés à partir de programmes qui stockent des données dans des tableaux, tels que Microsoft Excel ou OpenOffice Calc.

In [ ]:
with open(r"C:\Users\tchou\OneDrive\Desktop\test4.csv", 'r', encoding='utf8') as fichier_txt:
    print(fichier_txt.read())

nom, prenom et date_naissance sont appelés des descripteurs alors que, par exemple, Durand, Bennett, Massad et Traoré sont les valeurs du descripteur nom.

Application 3 :
Donnez les différentes valeurs du descripteur date_naissance.

In [ ]:
### votre réponse ici

On peut ouvrir un fichier csv comme un fichier texte, mais l'analyse des données posera problème. C'est pourquoi on privilégie le module csv car il permet une meilleure manipulation des données par programmation.
Pour la manipulation des données, il est conseillé de créer un objet de lecture des éléments du fichier csv.

In [ ]:
import csv

La méthode reader : Création d'un itérateur de listes

In [ ]:
with open("intro.csv", 'r', encoding='utf8') as fichier_csv:
    #On ouvre l'objet fichier_csv grâce au module csv
    #Le paramètre delimiter=',' précise que ',' sépare les éléments d'une ligne de test4.csv
    
    lecteur = csv.reader(fichier_csv, delimiter=',') # On transforme fichier_csv en un itérateur de listes

Application 4 :
Créer, en compréhension, une liste personnes contenant les trois entrées ci-dessus :

In [ ]:
### Votre réponse ici !
In [ ]:
with open("intro.csv", 'r', encoding='utf8') as fichier_csv:
    
    #On ouvre l'objet fichier_csv grâce au module csv
    #Le paramètre delimiter=',' précise que ',' sépare les éléments d'une ligne de test4.csv
    lecteur = csv.reader(fichier_csv, delimiter=',') # On transforme fichier_csv en un itérateur de listes
    
    lst_listes = [ligne for ligne in lecteur] # On crée une liste contenant les éléments (des listes) de lecteur
                                              #La première ligne est la ligne d'entêtes (les descripteurs)
    
    #ou simplement
    #liste_listes = list(lecteur)
In [ ]:
lst_listes
In [ ]:
lst_listes[1][2]

Application 5 :
Créer le fichier authentification.csv avec les données suivantes :

Nom, Prénom, Pseudonyme, Mot de passe
Dupont, Pierre, Toto, a1
Martin, Théo, Soleil, a2
Voyant, Claire, Lumière, a3
Conda, Anna, Serpent, a4

Vérification : ouvrir ce fichier avec un éditeur de texte .

La méthode DictReader : Création d'un itérateur de dictionnaires

In [ ]:
with open("intro.csv", 'r', encoding='utf8') as fichier_csv:
    lecteur = csv.DictReader(fichier_csv) #  On crée un itérateur de dictionnaire où la ligne d'en-tête
                                          # est utilisée comme clés dans le dictionnaire
    
    for ligne in lecteur:
        print(ligne)
In [ ]:
#Pour manipuler les données, on se crée lst_dict
with open("intro.csv", 'r', encoding='utf8') as fichier_csv:
    lecteur = csv.DictReader(fichier_csv) #On crée un itérateur de dictionnaires
    lst_dict = list(lecteur) # On crée une liste contenant les éléments (des dictionnaires) de lecteur
    
In [ ]:
lst_dict[0][" prenom"]

4. Fichier et namedtuple (tuple nommé)

Quelquefois on doit stocker les données dans une structure de données immuable et légère. Dans ce cas, l'utilisation d'un namedtuple pourrait être un bon compromis :

In [ ]:
from collections import namedtuple

with open(r"C:\Users\tchou\OneDrive\Desktop\test4.csv", 'r', encoding='utf8') as fichier_csv:
    
    lecteur = csv.reader(fichier_csv, delimiter=',') # On transforme fichier_csv en un itérateur de listes
    
    Personne = namedtuple("Personne", next(lecteur), rename=True) 
    #L'appel à next() récupère la première ligne de données de lecteur, qui contient l'en-tête du fichier CSV.
    #Cet en-tête fournit les noms de champ (les descripteurs) pour le fichier namedtuple.
    
    for descripteur in lecteur:
        elt = Personne(*descripteur)
        print(elt.nom, elt.prenom, elt.date_naissance)
In [ ]:
from collections import namedtuple
with open(r"C:\Users\tchou\OneDrive\Desktop\test4.csv", 'r', encoding='utf8') as fichier_csv:
    
    lecteur = csv.reader(fichier_csv, delimiter=',') # On transforme fichier_csv en un itérateur de listes
    
    Personne = namedtuple("Personne", next(lecteur), rename=True) 
    #L'appel à next() récupère la première ligne de données de lecteur, qui contient l'en-tête du fichier CSV.
    #Cet en-tête fournit les noms de champ pour le fichier namedtuple.
    
    eleves = [Personne(*descripteur) for descripteur in lecteur]#On crée une liste contenant les tuples nommés de lecteur
In [ ]:
eleves

Continuer