
Installer toute une bibliothèque pour écrire trois colonnes dans un fichier texte semble parfois disproportionné. Théophane, un lecteur de Lyon qui laisse souvent des commentaires mieux construits que mes propres paragraphes, m'a posé exactement cette question il y a quelques jours, à propos d'une petite automatisation que je bricole à la maison pour une liste d'associations. Il voulait savoir si, pour une débutante en Python comme moi, le module de base pour écrire un fichier CSV suffisait, ou s'il fallait tout de suite sauter sur un outil plus costaud. Pas de réponse toute faite ici, juste l'envie de poser les deux façons de faire côte à côte, un carnet plein de ratures ouvert à côté du clavier, pour avancer un peu dans ce que j'apprends petit à petit en codant le soir.
Le dilemme de Théophane
Valérian, mon collègue de bureau, m'a justement filé un nouvel export Excel la semaine dernière, en demandant d'un air pas franchement convaincu si « mon truc Python » pourrait un jour s'en occuper à sa place. Il n'y croit qu'à moitié, mais il continue à me passer ses fichiers, donc je suppose que ça compte comme un encouragement à sa façon. Ce genre de tableau ressemble toujours à la même chose une fois ouvert : des colonnes de noms, de dates, de quantités, qu'il faudrait pouvoir ressortir proprement en CSV sans tout retaper à la main.
Un moment, j'ai cru que je pouvais régler ce genre de question en regardant des tutoriels pendant mes trajets, sans ouvrir l'ordinateur en même temps, en me disant que les explications finiraient bien par rentrer. Ça n'a strictement rien donné. Le lendemain soir, devant mon clavier, j'avais tout oublié, et il a fallu recommencer les mains sur les touches pour que quelque chose reste vraiment. Depuis, je me méfie de ce genre de raccourci : chez moi, ça ne rentre qu'en tapant.
Le format CSV lui-même n'a rien d'effrayant une fois qu'on le regarde en face : des lignes de texte, des valeurs séparées par un caractère, et rien d'autre. C'est justement pour ça que deux outils aussi différents que le module intégré à Python et Pandas arrivent au même résultat final — ils empruntent juste des chemins très différents pour y arriver.

Écrire une ligne à la main avec le module csv
Ce module a l'avantage d'être déjà installé avec Python, sans rien à télécharger. On ouvre le fichier avec with open, qui se referme tout seul même si le script plante au milieu, on précise l'encodage UTF-8 pour que les accents ne se transforment pas en symboles bizarres, et on écrit ligne après ligne avec un objet writer. Je ne vais pas réexpliquer ici ce qu'un import change vraiment dans un script Python — j'en parle plus longuement un autre soir — mais la ligne import csv suffit à débloquer tout ça sans rien installer.
Avant de me lancer, j'avais une peur bête d'écraser un fichier existant par erreur, alors j'ai ressorti un vieux pense-bête que j'avais noté sur la façon de vérifier si un fichier existe python sans faire planter son script, histoire de ne pas perdre d'un coup ce que j'avais déjà écrit. Pour que chaque ligne garde le bon ordre de colonnes, je passe presque toujours par une liste plutôt qu'un tuple, une distinction que j'avais mis du temps à comprendre la différence entre liste et tuple en python simplement, et que je ne détaille pas à nouveau ici. Pour les blocages plus coriaces, Python propose aussi des outils comme try et except pour réagir sans tout arrêter, un sujet que je garde pour une autre soirée.
En cherchant un vieux script à ressortir comme exemple pour Théophane, je suis retombée sur un fichier .py que je ne me rappelais même pas avoir écrit, et j'ai compris ce qu'il faisait du premier coup, sans ouvrir une seule page d'aide à côté. Ça m'a fait sourire plus que ça ne devrait probablement. Il existe aussi une variante du module qui attend des dictionnaires plutôt que des listes pour chaque ligne, avec un en-tête nommé une fois pour toutes, mais c'est un terrain que je garde pour une autre soirée. Au tout début, avant de connaître le module, j'assemblais mes lignes à coups de f-string collées bout à bout, une méthode qui marche, mais qui m'a coûté son lot de virgules oubliées en plein milieu d'une ligne.
Le drame classique, pour qui habite en France, c'est le séparateur : Excel préfère souvent le point-virgule parce que la virgule sert déjà aux nombres à décimales, alors que Python, par défaut, écrit avec une virgule tout court. Un petit paramètre delimiter=';' règle ça d'un coup, et soudain les colonnes s'alignent au lieu de s'empiler toutes dans la première case.

Pandas change la donne, mais pas sans contrepartie
Pandas, lui, demande une tout autre logique : on construit un DataFrame, une sorte de grand tableau en mémoire, puis on tape une seule ligne, df.to_csv, et le fichier sort déjà avec ses séparateurs et ses accents bien gérés. Contrairement au module csv qui est déjà présent partout, Pandas demande une installation avec pip, et j'ai fini par apprivoiser ça proprement dans un environnement virtuel dédié plutôt que d'installer des bibliothèques un peu partout sur mon ordinateur — un passage que je ne détaille pas davantage ici. Le résultat, côté Pandas, c'est moins de lignes de code à écrire, donc moins d'occasions de se tromper sur une virgule mal placée.
Ce que Pandas ne dit pas tout haut, c'est qu'il faut comprendre une nouvelle idée avant de s'en servir correctement : ce DataFrame n'est pas une liste, pas un dictionnaire, mais un objet avec ses propres habitudes, ses propres méthodes, son propre vocabulaire. Pour trois colonnes et une poignée de lignes, apprendre tout ça peut sembler disproportionné. Pour trier, filtrer ou recouper des données avant de les exporter, en revanche, ce même objet devient soudain beaucoup plus pratique que n'importe quelle boucle écrite à la main.
Quand Pandas vaut-il vraiment la peine d'être installé ?
Pour un export ponctuel, une poignée de colonnes, un fichier qu'on écrit une fois et qu'on relit rarement, le module csv fait très bien le travail sans ajouter de dépendance à gérer. Dès qu'il faut croiser deux tableaux, filtrer des lignes selon une condition, ou répéter l'opération sur plusieurs fichiers d'affilée, Pandas rembourse largement le temps passé à l'installer et à apprendre son vocabulaire. Entre les deux, il n'y a pas de mauvaise réponse, seulement une question de proportion entre ce qu'on écrit et ce qu'on doit en faire ensuite.

Le choix que je ferais, ce soir, pour les fichiers de Valérian
Côté Valérian, je resterais sur le module csv de base : trois ou quatre colonnes, pas de calcul particulier, juste écrire ce qui existe déjà ailleurs sous une autre forme. Pour mes propres listes d'associations, qui grossissent et que j'aimerais un jour trier par quartier ou par date, je sens que Pandas finira par s'imposer, même si je n'y suis pas encore totalement à l'aise avec lui. Je répondrai ça à Théophane dans les commentaires, en espérant que ça lui évite au moins une des hésitations que j'ai eues de mon côté.
Ce que j'avais ressenti en commençant à découvrir l'automatisation réseau avec python pour simplifier ses tâches me revient un peu ce soir : au début, chaque nouvel outil a l'air d'un monde fermé, et puis on finit par voir que ce ne sont que des façons différentes de dire la même chose à l'ordinateur. Le radiateur a fait son petit claquement sec en se mettant en route, signe qu'il est temps de refermer le carnet. Il me reste quand même une question que je n'ai pas résolue : à partir de combien de colonnes est-ce que je changerais vraiment d'avis ?