Kodokon kodokon.com

Fichiers et modules : with, import, organisation

Lisez et écrivez des fichiers proprement avec with, échangez du JSON et organisez votre code en modules importables.

10 min · 3 questions

Ouvrir cette leçon dans Kodokon

Lire et écrire des fichiers, c'est le quotidien d'un programme réel : exports, journaux, configurations. Le mot-clé with ouvre le fichier et garantit sa fermeture, même si une erreur survient au milieu du bloc. C'est la seule façon professionnelle d'ouvrir un fichier : sans lui, un close() oublié peut corrompre des données ou épuiser les ressources du système.

PYTHON
lines = ["alpha", "beta", "gamma"]

with open("notes.txt", "w", encoding="utf-8") as f:
    for line in lines:
        f.write(line + "\n")

with open("notes.txt", encoding="utf-8") as f:
    content = f.read()

print(content)
Le mode 'w' écrit en écrasant le contenu ; sans mode, on lit.

Pour des données structurées, n'inventez pas votre propre format : le module json de la bibliothèque standard convertit dictionnaires et listes en texte, et inversement. C'est le format d'échange universel entre programmes, API et fichiers de configuration.

PYTHON
import json

config = {"debug": True, "retries": 3}

with open("config.json", "w", encoding="utf-8") as f:
    json.dump(config, f, indent=2)

with open("config.json", encoding="utf-8") as f:
    loaded = json.load(f)

print(loaded["retries"])  # 3
json.dump écrit la structure, json.load la reconstruit.

Un module est simplement un fichier .py : import billing charge billing.py et exécute son contenu une seule fois. Organisez votre code par responsabilité - un module pour la facturation, un autre pour le stockage - et gardez les import en haut du fichier. Le test if __name__ == "__main__" distingue deux situations : lancé directement, le fichier exécute ce bloc ; importé, il l'ignore.

PYTHON
def compute_total(prices):
    return round(sum(prices), 2)

def main():
    print(compute_total([9.99, 4.5, 20.0]))

if __name__ == "__main__":
    main()
Contenu de billing.py : importable partout, exécutable directement.
BASH
python billing.py
Lancé ainsi, le fichier exécute main() ; importé, il ne fait rien.

Quiz de validation

Vérifiez que vous avez bien retenu les points clés de cette leçon.

  1. Quel est l'avantage principal de with open(...) par rapport à open() seul ?
    • Le fichier est fermé automatiquement, même en cas d'erreur
    • La lecture du fichier est plus rapide
    • Le fichier est créé s'il n'existe pas, quel que soit le mode
  2. Quelle est la différence entre les modes "w" et "a" ?
    • "w" écrase le contenu existant, "a" ajoute à la fin
    • "w" écrit du texte, "a" écrit du binaire
    • "w" crée le fichier, "a" échoue s'il n'existe pas
  3. À quoi sert le test if __name__ == "__main__" ?
    • À vérifier que le fichier s'appelle bien main.py
    • À exécuter un bloc seulement quand le fichier est lancé directement
    • À empêcher l'import du module par d'autres fichiers