Un fichier CSV peut être lisible dans un tableur et rester dangereux à importer dans un logiciel métier. Une référence perd ses zéros, une date change de sens ou une colonne disparaît dans le dernier export du fournisseur. Python permet de contrôler ces fichiers avant qu’ils modifient des données réelles. Le résultat utile n’est pas seulement un verdict « valide » : c’est un rapport qui indique les lignes acceptables, les anomalies et les corrections attendues, tout en conservant la source intacte.
Écrire le contrat du fichier avant le script
Décrivez les colonnes attendues, leur type, leur caractère obligatoire et les valeurs autorisées. Précisez ce qu’une ligne représente : produit, variante, client ou opération. Ajoutez la clé qui permet de distinguer deux enregistrements. Sans cette définition, le programme peut détecter des erreurs de syntaxe tout en acceptant des incohérences métier. Une quantité négative est valide pour certains mouvements de stock, mais pas nécessairement pour une nouvelle commande.
Dans un exemple fictif, un fournisseur transmet des références, quantités et dates de disponibilité. Le contrat indique que la référence reste du texte, que la quantité est un entier et que la date suit un format explicite. Il précise aussi si une référence absente du catalogue doit bloquer le lot ou rejoindre une file de vérification. Cette décision appartient au processus métier ; Python ne peut pas l’inventer à partir du fichier.
Lire le CSV avec un parseur adapté
Le module standard csv de Python fournit notamment DictReader pour lire les lignes par nom de colonne. La documentation recommande une ouverture adaptée aux fins de ligne et décrit les dialectes de CSV. Utilisez ce parseur plutôt qu’un découpage manuel sur la virgule : un champ cité peut contenir lui-même une virgule, un guillemet ou un retour à la ligne.
Fixez l’encodage et le séparateur attendus selon votre source, puis signalez une divergence. Une détection automatique peut aider au diagnostic, mais elle ne doit pas corriger silencieusement tous les fichiers. Vérifiez les en-têtes dupliqués, les colonnes manquantes et celles qui apparaissent sans être prévues. Si une colonne nouvelle change le sens du fichier, le bon comportement peut être de suspendre l’import pour faire évoluer le contrat.

Valider sans transformer trop tôt
Conservez d’abord les valeurs brutes avec le numéro de ligne et la référence du fichier. Appliquez ensuite des contrôles séparés : présence, format, plage autorisée et cohérence entre champs. Une erreur doit pouvoir être expliquée avec la valeur reçue. Évitez de remplacer une chaîne illisible par zéro pour que le traitement continue ; vous transformeriez une anomalie visible en donnée apparemment correcte.
Pour les montants, définissez le séparateur décimal, la devise et la précision attendue. Pour les dates, indiquez le format et, si une heure existe, le fuseau. Une valeur comme 03/04 ne porte pas le même sens dans tous les contextes. Pour les codes postaux et identifiants, gardez le texte lorsque les zéros initiaux ont une signification. Le choix du type doit suivre l’usage de la donnée.
Contrôler les relations entre les colonnes
Certains contrôles portent sur plusieurs champs : une date de fin ne devrait pas précéder la date de début dans le scénario prévu, une quantité livrée ne doit pas dépasser la quantité autorisée sans explication, une référence de produit doit exister dans la source de référence. Écrivez ces règles dans des fonctions nommées selon le métier. Une personne qui maintient le script comprendra ainsi leur intention sans relire toute la logique.
Détecter les doublons selon une vraie identité
Deux lignes identiques peuvent être une répétition accidentelle ou deux événements légitimes. Définissez la clé de déduplication avant de supprimer quoi que ce soit. Pour un catalogue, la référence peut suffire dans certains cas. Pour des mouvements, il faut souvent un identifiant d’opération distinct. Un ensemble de colonnes choisi au hasard peut fusionner des données qu’il fallait conserver.
Le contrôle doit également rapprocher le fichier de l’état de destination lorsque le besoin l’exige. Une ligne absente du fichier précédent peut déjà avoir été intégrée manuellement. Pour une mise à jour, distinguez la nouvelle valeur et celle qui doit rester inchangée. Produisez un aperçu des créations, modifications et absences de changement. Cet aperçu rend l’impact de l’import compréhensible avant toute écriture.
Produire un rapport exploitable par l’équipe
Pour chaque anomalie, indiquez le fichier, la ligne, la référence, la colonne, la valeur observée et la règle violée. Un message comme « ligne invalide » oblige l’utilisateur à recommencer le diagnostic. Préférez une explication précise, par exemple « date attendue au format défini, valeur non interprétable ». Ajoutez une synthèse des erreurs par catégorie pour repérer une mauvaise configuration générale plutôt que corriger cent lignes une à une.
Séparez les rejets bloquants des avertissements. Une colonne obligatoire absente peut invalider tout le lot ; un libellé trop long peut demander un arbitrage sur une seule ligne. Le choix de poursuivre avec les lignes valides doit être explicite. Sur certaines opérations, un import partiel est acceptable ; sur d’autres, il rend l’ensemble incohérent. Le rapport doit rendre cette décision visible.

Organiser une exécution à blanc puis une écriture contrôlée
La première étape ne modifie aucun outil métier. Elle lit, contrôle et produit les résultats. Après validation, une seconde étape applique le lot accepté avec une référence d’exécution. Conservez les compteurs et les identifiants créés pour pouvoir reprendre une interruption. Un script qui mélange lecture, nettoyage et écriture dans une boucle unique est souvent plus difficile à arrêter et à comprendre.
Testez un fichier vide, un en-tête incorrect, une ligne citée contenant une virgule, une référence répétée et un encodage inattendu. Ajoutez un fichier valide servant de référence. Ces exemples doivent vérifier des règles métier et des cas de lecture réellement rencontrés. Ils aideront à détecter une régression lorsque le fournisseur modifie son export ou que vous ajoutez une nouvelle colonne.
Prévoir la maintenance du contrôle
À la livraison, gardez le contrat de données, les fichiers de test, la commande d’exécution et l’emplacement des rapports. Désignez une personne qui valide les évolutions de format. Un export fournisseur peut changer sans prévenir ; le contrôle doit alors échouer de façon compréhensible plutôt que produire un résultat trompeur. La traçabilité des versions aide à savoir avec quelles règles un ancien lot a été accepté.
Notre expertise Python couvre les traitements de fichiers et les connexions aux outils métier. Pour cadrer un contrôle CSV, fournissez un échantillon anonymisé, le format attendu et les erreurs déjà rencontrées. Ces éléments permettent de construire un programme ciblé, avec des rejets compréhensibles et une reprise maîtrisée.
Pour approfondir : ChatGPT en entreprise : quelles tâches déléguer sans perdre le contrôle ?.
Pour approfondir : HubSpot : préparer un import de contacts qui respecte les fiches existantes.



