Lisez un code Python existant, manipulez des données et gérez des erreurs simples

Dans les chapitres précédents, vous avez préparé votre environnement Python, écrit des instructions simples et organisé des informations dans une classe. Dans ce dernier chapitre, vous allez prendre un peu de recul : au lieu d'écrire uniquement du code isolé, vous allez apprendre à vous repérer dans une petite structure de code existante.

L'objectif est de savoir identifier les fichiers importants, suivre le point d'entrée du programme, lire une fonction simple, manipuler des données issues d'un fichier et comprendre les erreurs les plus fréquentes sans vous perdre dans tous les détails de Python.

Repérez les fichiers importants

Un programme Python est souvent organisé dans plusieurs fichiers. Pour commencer, ne cherchez pas à tout comprendre en même temps. Repérez d'abord les fichiers qui vous aident à comprendre le fonctionnement général.

Voici un exemple de structure simple :

projet/
├── main.py
├── product.py
└── products.csv

Dans les chapitres précédents, vous avez parfois écrit directement le nom, le prix ou le stock d'un produit dans le script. C'est pratique pour apprendre une notion isolée, car tout est visible au même endroit. Mais dans un programme un peu plus réaliste, on sépare progressivement les responsabilités : le code qui lance le programme, le code qui décrit une donnée, et les données elles-mêmes.

Dans cette structure :

  • main.pycontient le point de départ du programme ;

  • product.pydécrit la structure d'un produit (la classeProductdu chapitre précédent) ;

  • products.csvcontient des données sur les produits.

La différence principale : un fichier.pycontient du code que Python peut exécuter ; un fichier.csv(Comma-Separated Values, littéralement « valeurs séparées par des virgules ») contient des données organisées en lignes, chaque valeur séparée par une virgule. Python ne « lance » pas directement le fichier CSV : le programme Python le lit pour utiliser les informations qu'il contient.

Suivez le point d'entrée du programme

Quand vous lisez un code Python existant, cherchez le fichier qui est destiné à être lancé — souventmain.py— et repérez le point d'entrée. En Python, c'est très souvent la structure suivante :

def main():
    print("Chargement des produits...")


if __name__ == "__main__":
    main()

La ligne :

if __name__ == "__main__":

peut sembler mystérieuse au début. Elle signifie simplement : « si ce fichier est lancé directement (et non importé depuis un autre fichier), alors exécute ce qui suit ». C'est la manière idiomatique en Python de déclarer un point d'entrée.

Quand vous lancezpython main.py, Python exécute cette condition, appellemain(), et la console affiche :

Chargement des produits...

Pour lire ce code, observez d'abord ce que le programme affiche, puis retrouvez la ligne qui produit cet affichage, puis regardez dans quelle fonction cette ligne se trouve.

Suivez une fonction appelée depuismain

Dans le chapitre 3, vous avez déjà vu qu'une fonction permet de regrouper une logique sous un nom. Ici, vous allez apprendre à lire un code existant en suivant le chemin d'exécution depuismain.

Voici un exemple complet :

def display_product(name, stock):
    print(f"{name} - stock : {stock}")


def main():
    display_product("Sac à dos", 12)


if __name__ == "__main__":
    main()

Commencez par observer le résultat affiché :

Sac à dos - stock : 12

Pour comprendre ce résultat, revenez au point de départ du programme : la fonctionmain. Dansmain, une seule ligne lance la suite du traitement :

display_product("Sac à dos", 12)

Cette ligne ne produit pas directement l'affichage. Elle appelle une autre fonction,display_product, et lui envoie deux valeurs :"Sac à dos"et12.

Repérez ensuite la définition de la fonction :

def display_product(name, stock):
    print(f"{name} - stock : {stock}")

Les valeurs envoyées arrivent dans les paramètres :"Sac à dos"arrive dansname, et12arrive dansstock. La ligne d'affichage utilise ensuite ces deux paramètres pour construire le message affiché dans la console.

Pour lire ce type de code, suivez toujours le même chemin :

  • partez demain;

  • repérez la fonction appelée ;

  • retrouvez la définition de la fonction ;

  • suivez les valeurs envoyées dans les paramètres ;

  • identifiez la ligne qui produit le résultat visible.

Manipulez des données issues d'un fichier

Un programme Python peut utiliser des données écrites dans un fichier. Pour commencer simplement, imaginez un fichierproducts.csvqui contient une ligne par produit :

Sac à dos,45.90,12
Carnet,4.50,0
Stylo,1.20,30

Chaque ligne contient trois informations séparées par des virgules : le nom du produit, son prix et son stock.

Pour lire un fichier en Python, on utilise le mot-cléwithassocié à la fonctionopen:

with open("products.csv", encoding="utf-8") as file:
    for line in file:
        print(line.strip())

Commencez par observer le résultat : le programme lit le fichier, puis affiche chaque ligne dans la console.

Sac à dos,45.90,12
Carnet,4.50,0
Stylo,1.20,30

Dans cet exemple :

  • open("products.csv", encoding="utf-8")ouvre le fichier en mode lecture ;

  • with ... as file:garantit que Python ferme automatiquement le fichier à la sortie du bloc, même en cas d'erreur ;

  • la bouclefor line in file:parcourt le fichier ligne par ligne ;

  • line.strip()retire les espaces et le saut de ligne en fin de ligne ;

  • print(...)affiche chaque ligne nettoyée.

À ce stade, vous n'avez pas besoin de connaître toutes les possibilités de lecture de fichiers en Python. Retenez surtout le cheminement : le programme cible un fichier, l'ouvre avecwith open(...), lit ses lignes, puis les parcourt.

Transformez une ligne CSV en informations utilisables

Afficher une ligne entière est utile pour vérifier que le fichier est bien lu. Mais ensuite, vous voudrez souvent séparer les informations de cette ligne.

Les exemples qui suivent partent d'un fichier au format csv. La technique de découpage avecsplit(",")est adaptée à ce format précis : d'autres formats (JSON, XML, YAML…) demandent des outils différents que vous découvrirez plus tard.

Par exemple, à partir de cette ligne :

Sac à dos,45.90,12

vous pouvez séparer les valeurs avecsplit:

line = "Sac à dos,45.90,12"
parts = line.split(",")

name = parts[0]
price = float(parts[1])
stock = int(parts[2])

print(name)
print(price)
print(stock)

Ce code affiche :

Sac à dos
45.9
12

La ligne suivante découpe le texte à chaque virgule :

parts = line.split(",")

Après ce découpage,parts[0]contient"Sac à dos",parts[1]contient"45.90"etparts[2]contient"12".

Le nom peut rester un texte :

name = parts[0]

Le prix et le stock doivent être convertis, car ils viennent du fichier sous forme de texte :

price = float(parts[1])
stock = int(parts[2])

float(...)transforme un texte en nombre décimal.int(...)transforme un texte en nombre entier.

Gérez une erreur simple

Quand un programme lit un fichier, plusieurs problèmes peuvent arriver. Le fichier peut être absent, une ligne peut être mal écrite ou une valeur peut ne pas avoir le format attendu. En Python, ces situations produisent des exceptions.

Voici un exemple simple :

stock_text = "douze"
stock = int(stock_text)
print(stock)

Ce programme essaie de transformer le texte"douze"en nombre entier. Python ne peut pas faire cette conversion, carintattend un nombre comme"12", pas un mot écrit. Le programme s'arrête avec une erreurValueError.

Vous pouvez entourer le code sensible avectryetexcept:

stock_text = "douze"

try:
    stock = int(stock_text)
    print(stock)
except ValueError:
    print("Stock invalide")

Cette fois, Python essaie d'exécuter le code placé danstry. Si la conversion rencontre uneValueError, le programme passe dansexceptet affiche un message plus compréhensible :

Stock invalide

Dans cet exemple :

  • trycontient le code qui peut provoquer une erreur ;

  • except ValueError:contient ce que le programme doit faire si uneValueErrorarrive ;

  • ValueErrorest le type d'erreur levé quandint(...)reçoit un texte qui n'est pas un nombre.

Vous pouvez aussi attraper d'autres types d'erreurs. Par exemple, si le fichier lu n'existe pas, Python lève uneFileNotFoundError:

try:
    with open("products.csv", encoding="utf-8") as file:
        for line in file:
            print(line.strip())
except FileNotFoundError:
    print("Fichier introuvable, contactez le support.")

Ici, si le fichier n'existe pas, Python passe dans le blocexceptet affiche un message clair à la place d'un plantage brutal.

Aller plus loin : gardez un œil sur les évolutions du langage

Python évolue au fil des versions : la syntaxe s'enrichit, l'outillage change (par exemplepipd'un côté,uvqui prend de l'ampleur de l'autre), la performance de l'interpréteur s'améliore. Vous pouvez rencontrer, dans des bases de code récentes, des constructions un peu plus modernes :match/casepour le pattern matching, lesdataclass, les annotations de type (nom: str), ou unwithcombiné à plusieurs contextes.

À vous de jouer

Votre équipe a exporté le menu du jour au format CSV. Créez un fichier menu.csvà la racine de votre projet (encodage UTF-8) et collez-y ces 4 lignes :

Pizza,12
Salade,8
Burger,10
Tiramisu,6

Votre mission : afficher chaque plat au formatPizza — 12 €en lisant le fichier, et gérer proprement le cas où le fichier est introuvable.

# Étape 1 : entourez la lecture d’un try / except FileNotFoundError
# Étape 2 : ouvrez "menu.csv" avec with open(...) as file:
# Étape 3 : parcourez les lignes, découpez chaque ligne à la virgule
#           et affichez "<nom> — <prix> €"

Votre mission :

  1. Dans un bloctry, ouvrezmenu.csvavecwith open("menu.csv", encoding="utf-8") as file:puis parcourez ses lignes.

  2. Pour chaque ligne, appliquez.strip()puis.split(",")pour séparer le nom et le prix, et affichezPizza — 12 €avec une f-string.

  3. Dans un blocexcept FileNotFoundError:, affichezMenu introuvable.

En résumé

  • Pour lire un code Python existant, commencez par le fichiermain.pyet repérez la fonctionmainou le blocif __name__ == "__main__":.

  • Une fonction appelée depuismainpermet de déplacer une partie de la logique dans un bloc nommé.

  • Un fichier texte peut fournir des données que Python lit avecwith open(...) as fichier:.

  • Les valeurs lues dans un fichier arrivent sous forme de texte et doivent parfois être converties avecint(...),float(...), etc.

  • tryetexceptpermettent de gérer une erreur simple avec un message plus utile ;ValueErroretFileNotFoundErrorsont deux exceptions fréquentes.

Vous avez maintenant les repères essentiels pour lire un code Python simple, manipuler des données et gérer des erreurs courantes. Pour vérifier que ces notions sont claires, passez maintenant au quiz du cours.

Ever considered an OpenClassrooms diploma?
  • Up to 100% of your training program funded
  • Flexible start date
  • Career-focused projects
  • Individual mentoring
Find the training program and funding option that suits you best