ParcoursOuvrir l'appli

Lire un fichier de données

Projet : analyser des ventes · 50 min

Le projet

Mama Brigitte tient une petite boutique à Yaoundé. Pendant trois mois, elle a noté chaque vente dans un cahier. Son neveu a tout recopié dans un tableur, puis l'a enregistré dans un fichier ventes.csv. Elle te pose quatre questions :

  1. Combien ai-je gagné en tout ?
  2. Quel produit me rapporte le plus ?
  3. Quel mois a été le meilleur ?
  4. Lequel de mes trois vendeurs vend le plus ?

Elle pourrait faire les additions à la main. Mais avec 42 ventes, c'est long, et avec 42 000 ventes, c'est impossible. Tu vas écrire un programme qui répond à tout ça en une fraction de seconde, et qui marchera encore le mois prochain, avec de nouvelles ventes.

Ce module est un projet : tout ce que tu as appris (variables, conditions, boucles, fonctions, dictionnaires) va servir. Tu vas apprendre trois choses nouvelles en chemin : lire un fichier, gérer les erreurs et écrire un fichier.

Qu'est-ce qu'un fichier CSV ?

Voici le début de ventes.csv :

date,produit,quantite,prix_unitaire,vendeur
2026-01-01,riz,5,1200,Awa
2026-01-02,huile,10,1500,Paul

Et le même contenu, vu comme un tableau :

date produit quantite prix_unitaire vendeur
2026-01-01 riz 5 1200 Awa
2026-01-02 huile 10 1500 Paul

La date est écrite AAAA-MM-JJ (année, mois, jour). Ce format a un gros avantage : trier les dates comme des textes les met aussi dans l'ordre chronologique. Il servira au cours 3.

Excel, Google Sheets, LibreOffice : tous les tableurs savent ouvrir et enregistrer des CSV. C'est le format le plus simple pour échanger des données entre deux logiciels.

Ouvrir et lire un fichier

Pour lire un fichier en Python, on l'ouvre, on lit son contenu, puis on le ferme.

with open("ventes.csv", encoding="utf-8") as f:
    contenu = f.read()

print(contenu)

Lis cette ligne de gauche à droite : « avec le fichier ventes.csv ouvert, appelé f dans le bloc... ».

Lire tout le fichier

Le fichier ventes.csv est fourni : ouvre-le ci-dessous pour voir son contenu, puis lance le code. Essaie ensuite de changer le nom en "vente.csv" (sans le s) pour voir l'erreur.

with open("ventes.csv", encoding="utf-8") as f:
    contenu = f.read()

print(type(contenu))
print(len(contenu), "caractères")
print(contenu[:120])

Découper en lignes

f.read() donne un seul long texte. Nous, on veut traiter les ventes une par une. Il faut donc découper ce texte en lignes.

with open("ventes.csv", encoding="utf-8") as f:
    lignes = f.read().splitlines()

print(lignes[0])     # date,produit,quantite,prix_unitaire,vendeur
print(lignes[1])     # 2026-01-01,riz,5,1200,Awa
print(len(lignes))   # 43 : l'en-tête + 42 ventes

f.read().splitlines() enchaîne deux méthodes : f.read() renvoie le texte, puis .splitlines() s'applique à ce texte.

Pour sauter l'en-tête, tu connais déjà l'outil : une tranche. lignes[1:] est la liste de toutes les lignes à partir de l'index 1, donc sans la ligne 0.

for ligne in lignes[1:]:
    print(ligne)

Exercice : Combien de ventes ?

Ouvre ventes.csv, découpe-le en lignes, et range dans nb_ventes le nombre de ventes (donc sans compter l'en-tête). Affiche-le.

Voir une solution
with open("ventes.csv", encoding="utf-8") as f:
    lignes = f.read().splitlines()

nb_ventes = len(lignes) - 1
print(nb_ventes)

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Découper une ligne en colonnes

Une ligne comme "2026-01-01,riz,5,1200,Awa" est un seul texte. Pour récupérer le produit ou la quantité, on la découpe aux virgules avec .split(","), que tu as déjà utilisé avec les espaces :

ligne = "2026-01-01,riz,5,1200,Awa"
morceaux = ligne.split(",")
print(morceaux)   # ['2026-01-01', 'riz', '5', '1200', 'Awa']

Chaque colonne a maintenant son index : 0 pour la date, 1 pour le produit, 2 pour la quantité, 3 pour le prix, 4 pour le vendeur.

Le déballage

Écrire morceaux[0], morceaux[1]... devient vite illisible. Python permet de ranger chaque élément d'une liste dans sa propre variable, en une ligne :

date, produit, quantite, prix, vendeur = ligne.split(",")
print(produit)    # riz

Tu l'as déjà fait sans le savoir dans for mot, n in compteur.items(): et dans for q, p in zip(quantites, prix):.

Pratique : Découpe une ligne

Tape chaque ligne, et prévois le résultat avant d'appuyer sur Entrée.

Un terminal simulé t'attend dans l'appli, sans rien installer. Pratiquer

Exercice : Le chiffre d'affaires, à la main

Parcours les ventes (sans l'en-tête), découpe chaque ligne et calcule le chiffre d'affaires total dans total. Affiche Chiffre d'affaires : 142050 FCFA.

Voir une solution
with open("ventes.csv", encoding="utf-8") as f:
    lignes = f.read().splitlines()

total = 0
for ligne in lignes[1:]:
    date, produit, quantite, prix, vendeur = ligne.split(",")
    total += int(quantite) * int(prix)

print(f"Chiffre d'affaires : {total} FCFA")

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Exercice : Combien de sacs de riz ?

Calcule dans sacs la quantité totale de riz vendue (pas le montant : le nombre de sacs). Affiche Riz vendu : 29 sacs.

Voir une solution
with open("ventes.csv", encoding="utf-8") as f:
    lignes = f.read().splitlines()

sacs = 0
for ligne in lignes[1:]:
    date, produit, quantite, prix, vendeur = ligne.split(",")
    if produit == "riz":
        sacs += int(quantite)

print(f"Riz vendu : {sacs} sacs")

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Ranger les ventes dans des dictionnaires

Les deux exercices précédents répètent le même travail : ouvrir, découper, déballer, convertir. Pour chaque nouvelle question, il faudrait tout recommencer. Un programmeur fait mieux : il écrit une fonction qui lit le fichier une fois pour toutes et renvoie des données prêtes à l'emploi.

Quelle forme pour ces données ? Tu l'as vu dans le module précédent : une liste de dictionnaires, un dictionnaire par vente.

[
    {"date": "2026-01-01", "produit": "riz", "quantite": 5, "prix": 1200, "vendeur": "Awa"},
    {"date": "2026-01-02", "produit": "huile", "quantite": 10, "prix": 1500, "vendeur": "Paul"},
    ...
]

Avantages :

Exercice : La brique de lecture : lire_ventes

Écris la fonction lire_ventes(nom_fichier). Elle ouvre le fichier dont le nom est donné, et renvoie la liste des ventes, chacune sous forme de dictionnaire avec les clés "date", "produit", "quantite", "prix" et "vendeur". La quantité et le prix doivent être des nombres entiers.

Le correcteur la testera sur ventes.csv et sur un deuxième fichier, petit.csv.

Voir une solution
def lire_ventes(nom_fichier):
    """Lit un fichier CSV de ventes et renvoie une liste de dictionnaires."""
    with open(nom_fichier, encoding="utf-8") as f:
        lignes = f.read().splitlines()
    ventes = []
    for ligne in lignes[1:]:
        date, produit, quantite, prix, vendeur = ligne.split(",")
        ventes.append({
            "date": date,
            "produit": produit,
            "quantite": int(quantite),
            "prix": int(prix),
            "vendeur": vendeur,
        })
    return ventes


ventes = lire_ventes("ventes.csv")
print(len(ventes), "ventes")
print(ventes[0])

Dans l'appli, ton code est exécuté et corrigé automatiquement. Faire l'exercice

Teste-toi

Un fichier contient 3 lignes : l'en-tête, puis 2 ventes. Après lignes = f.read().splitlines(), que vaut len(lignes[1:]) ?
  1. 3
  2. 2 (bonne réponse)
  3. 1
  4. Une erreur, car on ne peut pas trancher une liste de lignes