CSV original
CSV modifié

Diff CSV : comparer deux fichiers CSV en ligne

Collez ou téléversez deux fichiers CSV et voyez les lignes, prix et champs qui ont changé côte à côte. Tout dans votre navigateur, sans inscription ni envoi.

Qu'est-ce que l'outil de diff CSV ?

Un outil gratuit, dans le navigateur, pour comparer deux fichiers CSV. Collez l'export fournisseur d'hier à gauche, celui d'aujourd'hui à droite, et les cellules modifiées s'allument. Rien ne quitte votre machine. Pas de compte, pas d'envoi, pas de quota.

Le diff lui-même est au niveau caractère, avec une passe de post-traitement sémantique qui regroupe les surlignages sur la valeur entière du champ plutôt que de les disperser entre les virgules. La grammaire supposée par cet outil est la spécification CSV de fait, RFC 4180 : champs séparés par des virgules, guillemets doubles optionnels, guillemets doublés pour échapper un guillemet littéral, fins de ligne CRLF.

Si vous avez déjà ouvert deux listes de prix fournisseur de 8 000 lignes dans Excel, parcouru colonne par colonne en cherchant le SKU dont le prix a bougé, et abandonné, cet outil vous mène au changement en quelques secondes. Pour de la prose libre, utilisez notre outil de diff de texte. Pour des données structurées avec des clés stables, le diff JSON gère le réordonnancement d'objets bien mieux que le CSV. Le diff XML est le bon choix pour les exports de données legacy issus d'ERP plus anciens.

Comment fonctionne réellement le diff

La comparaison est ligne par ligne, consciente des caractères. Les insertions apparaissent en vert à droite, les suppressions en rouge à gauche. La passe en mode ligne maintient des performances raisonnables sur des fichiers de 5 Mo, puis un raffinement en mode caractère sur les lignes modifiées met en évidence le champ exact qui a bougé. Pour la plupart des exports de tableur, c'est plus rapide et plus propre que de lancer diff dans un terminal.

Soyons honnêtes sur ce que ce n'est pas. C'est un diff de texte, pas une comparaison réellement consciente des clés de ligne. Si vous réordonnez les lignes en triant sur une autre colonne, chaque ligne paraîtra modifiée même si les données sous-jacentes sont identiques. Si vous réordonnez les colonnes, même chose. Il n'y a pas de notion de clé primaire ici, comme le ferait csvjoin de csvkit ou un merge pandas sur un SKU. Triez les deux fichiers de la même manière avant de coller, ou utilisez l'un de ces outils quand vous avez vraiment besoin d'une comparaison ensembliste.

La ligne d'en-tête est une donnée pour cet outil. La ligne 1 est traitée comme n'importe quelle autre, ce qui veut dire qu'un renommage d'en-tête apparaît comme un diff d'une ligne en haut. C'est en général ce que vous voulez quand vous suivez la dérive de schéma. Si vous ne tenez qu'aux lignes du corps, retirez l'en-tête des deux côtés avant de coller. Le format CSV lui-même, y compris les conventions d'en-tête, est décrit dans l'article de fond sur le CSV et dans RFC 7111, qui définit des fragments d'URI pour sélectionner des plages de cellules dans une ressource CSV.

Comment comparer des fichiers CSV en trois étapes

Deux panneaux de texte, un diff. Pas d'inscription, pas d'envoi, pas d'aller-retour serveur.

  1. 1

    Collez ou téléversez votre CSV

    Collez le CSV plus ancien à gauche et le plus récent à droite. Ou cliquez sur Téléverser de l'un ou l'autre côté pour charger un fichier .csv, .tsv ou .txt directement depuis le disque. Le bouton Exemple remplit les deux panneaux avec une petite liste de prix produit pour voir l'outil en action d'abord.

  2. 2

    Normalisez les fins de ligne si besoin

    Excel enregistre le CSV en CRLF (\r\n) sous Windows ; des outils comme csv.writer de Python ou un pipeline shell Unix écrivent souvent du LF (\n). Si un côté est en CRLF et l'autre en LF, chaque ligne paraîtra modifiée. Ouvrez les deux dans le même éditeur (ou passez-les par dos2unix) avant de coller pour que les fins coïncident. Le BOM UTF-8 au début d'un CSV enregistré par Excel est l'autre coupable classique ; retirez-le si votre autre fichier n'en a pas.

  3. 3

    Lisez le diff

    Les suppressions apparaissent surlignées en rouge à gauche, les insertions en vert à droite. Faites défiler un côté, l'autre suit. Cherchez les prix modifiés, les nouvelles lignes ajoutées en bas, les adresses e-mail corrigées au milieu de la liste. Les changements d'en-tête apparaissent comme un diff d'une ligne sur la ligne 1.

Quand le diff CSV est le bon outil

Réconcilier un CSV d'inventaire fournisseur avec votre dernier export

Un fournisseur envoie une nouvelle liste de prix chaque semaine. Déposez le fichier de la semaine dernière dans le panneau gauche, celui de cette semaine à droite, et les mouvements de prix au niveau SKU sautent aux yeux sans avoir à parcourir 4 000 lignes dans Excel à la chasse à la cellule jaune. Le faire dans Excel avec VLOOKUP sur une seconde feuille est faisable mais lent ; le diff est plus rapide quand vous avez juste besoin d'une vérification rapide avant de pousser les nouveaux prix dans votre boutique.

Comparer un export de base de données à une copie partenaire anonymisée

Avant d'envoyer un dump clients à un partenaire, vous masquez les PII : l'e-mail devient [email protected], le téléphone est masqué, les noms complets tronqués à l'initiale. Comparez l'export source à la copie anonymisée et confirmez que seules les colonnes masquées ont changé. Si une colonne billing_address apparaît de manière inattendue dans le diff, votre script de masquage a oublié un champ, et vous le repérez avant que le fichier ne quitte votre laptop.

Auditer un flux produit avant de le pousser dans un catalogue marchand

Google Merchant Center, Facebook Catalog et la plupart des marketplaces avalent un flux CSV (ou TSV). Après que votre CMS a régénéré le flux, comparez-le à la copie connue bonne d'hier soir pour attraper une regex qui a retiré les zéros de fin de price, une colonne de disponibilité passée de in_stock à out_of_stock sur chaque ligne à cause d'un bug de IF(), ou un nouveau champ GTIN ajouté par votre équipe sans rien dire à personne.

Comparer deux exports CSV Salesforce ou HubSpot

Quand un sales op demande "quels contacts ont changé depuis la semaine dernière ?", exportez le même rapport deux fois (avant et maintenant), et comparez les deux fichiers. Le CSV ne sera pas trié par ID d'enregistrement par défaut, donc triez les deux côtés sur la colonne ID d'abord ; sinon chaque ligne paraît mélangée. Une fois trié, les vrais changements (un statut de lead passé de MQL à SQL, un e-mail corrigé après un bounce) ressortent clairement.

Comparer la sortie d'un pipeline avec celle d'hier

Un job ETL nocturne écrit un CSV dans S3. Le nombre de lignes d'aujourd'hui est suspectement différent de celui d'hier. Récupérez les deux fichiers, comparez-les, et vous trouvez la dérive de schéma : une nouvelle colonne est apparue au milieu du tableau parce que l'API amont a ajouté un champ, ce qui a décalé chaque cellule en aval d'une position. Le diff attrape le changement structurel instantanément, là où un simple contrôle du nombre de lignes ne vous aurait dit qu'une chose : que quelque chose cloche.

Relire un CSV de résultats d'A/B test de votre équipe stats

Votre data scientist livre un CSV avec les résultats de l'expérience. Ils relancent l'analyse après un ajustement méthodologique. Comparez v1 à v2 : seules les colonnes de statistiques de test ont changé, ou les comptes d'assignation ont aussi bougé (ce qui voudrait dire que la définition de cohorte a bougé) ? Comparer honnêtement les sorties d'analyse est la vérification la moins chère avant de livrer une fonctionnalité fondée sur le résultat.

Aide-mémoire CSV

Une petite antisèche pour les cas limites de parseur que cet outil fait remonter le plus souvent. La référence grammaticale est RFC 4180 plus ce que les vrais outils de tableur émettent en pratique.

TopicWhat this tool does
Guillemets selon RFC 4180Les champs contenant des virgules, des guillemets doubles ou des sauts de ligne doivent être entourés de guillemets doubles. "Widget, small" est un seul champ. Des valeurs simples comme 4.99 n'ont pas besoin de guillemets. Voir RFC 4180.
Guillemets doubles échappésUn " littéral dans un champ entre guillemets s'échappe en le doublant. "He said ""hi""" donne la valeur He said "hi". L'échappement par antislash n'est pas du CSV standard, même si certains outils l'acceptent.
Sauts de ligne intégrésLes sauts de ligne sont autorisés dans un champ entre guillemets selon RFC 4180. Une adresse multi-lignes dans une seule cellule est du CSV valide. Le diff traite chaque ligne physique comme une unité, donc un champ portant un saut de ligne peut afficher des modifications sur la ligne englobante.
Fins de ligne (CRLF vs LF)RFC 4180 dit CRLF (\r\n). Excel émet du CRLF. La plupart des outils Unix émettent du LF. Mélanger les deux entre les panneaux gauche et droit fait que chaque ligne paraît modifiée. Normalisez les fins avant de comparer.
BOM (UTF-8)Les CSV enregistrés par Excel commencent souvent par un BOM UTF-8 (EF BB BF). La FAQ Unicode sur le BOM le marque comme optionnel et inutile pour UTF-8. Un BOM dépareillé entre les deux fichiers produit un diff fantôme à la ligne 1.
Dialectes de délimiteurLa virgule est le défaut ; les exports Excel européens utilisent le point-virgule (;) parce que la virgule est le séparateur décimal dans beaucoup de locales. TSV (tabulation) est une variante courante ; voir le contexte TSV. Les deux fichiers doivent utiliser le même délimiteur pour un diff utile.
Lignes d'en-têteCet outil traite la ligne 1 comme une donnée. Un renommage de colonne apparaît comme un diff d'une ligne en haut. Si vous voulez ne comparer que les lignes de corps, retirez l'en-tête des deux panneaux avant de coller. La plupart des parseurs (csv.DictReader de Python, pandas) traitent la ligne 1 comme un en-tête par convention, mais le format ne l'exige pas.
EncodageUTF-8 uniquement via le FileReader du navigateur. Latin-1 (ISO-8859-1) et Windows-1252 chargeront mais afficheront des accents tordus. Convertissez avec iconv ou "Save with Encoding" de VS Code avant de coller.

Diff CSV : questions fréquentes

Réordonner les lignes ou les colonnes d'un CSV produira-t-il un diff bruité ?

Oui : le moteur compare les caractères ligne par ligne, donc réordonner les lignes ou les colonnes apparaîtra comme des différences même quand les données sous-jacentes sont identiques. C'est un diff de texte, avec quelques aides à la lecture conscientes du CSV. Pas d'appariement par clé de ligne, pas de conscience du réordonnancement de colonnes, pas de compréhension sémantique des types. Pour ce niveau de comparaison, utilisez un outil comme csvkit, pandas avec un merge sur clé primaire, ou chargez les deux fichiers dans SQLite et lancez une requête EXCEPT. Pour la comparaison de tableurs au quotidien, cet outil couvre l'essentiel de vos besoins.

Comment gérer les fins de ligne CRLF de Windows vs LF d'Unix ?

Excel écrit le CSV en CRLF (\r\n), csv.writer de Python écrit typiquement du LF (\n), et un pipeline shell peut produire l'un ou l'autre selon les flags. Si un panneau est en CRLF et l'autre en LF, le diff voit une différence à chaque ligne. La solution est de normaliser les deux côtés avant de coller : ouvrez-les dans le même éditeur et enregistrez avec une seule fin de ligne, ou passez-en un par dos2unix ou unix2dos. RFC 4180 impose CRLF, mais les fichiers CSV du monde réel utilisent l'un ou l'autre.

L'outil gère-t-il le réordonnancement de colonnes ?

Non. C'est un diff de texte ligne à ligne. Si la ligne 1 a les colonnes dans l'ordre sku,name,price à gauche et name,sku,price à droite, chaque cellule de chaque ligne paraîtra modifiée parce que le diff voit du texte brut, pas un modèle de colonnes. Idem si vous triez les deux fichiers sur des colonnes différentes. Réordonnez les colonnes et les lignes pour qu'elles correspondent avant de comparer, ou prenez un outil conscient des clés comme csvjoin de csvkit ou un merge pandas quand le modèle de colonnes compte vraiment.

Comment l'outil gère-t-il le BOM UTF-8 qu'Excel ajoute ?

Excel sous Windows écrit souvent un byte order mark UTF-8 au début d'un CSV (les octets EF BB BF), même si la FAQ Unicode sur le BOM dit qu'il est inutile pour UTF-8. Si l'un de vos fichiers a un BOM et l'autre non, vous verrez un diff fantôme d'un caractère à la ligne 1, colonne 1. Ouvrez le fichier dans un vrai éditeur de texte (VS Code, Notepad++, Sublime) et réenregistrez sans BOM, ou retirez les trois premiers octets à la main avant de coller.

Quels encodages l'outil accepte-t-il ?

UTF-8 est le seul encodage que la voie FileReader décode correctement ici. Un fichier Latin-1 ou Windows-1252 chargera mais les caractères accentués apparaîtront tordus (ex. café devient café). UTF-16 avec BOM apparaîtra complètement cassé. Convertissez d'abord les fichiers non UTF-8 : dans le terminal, iconv -f WINDOWS-1252 -t UTF-8 input.csv > out.csv ; dans VS Code, utilisez "Reopen with Encoding" puis "Save with Encoding" en UTF-8. Le module csv de Python et pandas permettent tous deux de spécifier l'encodage source à la lecture.

Quelle taille de fichier CSV puis-je comparer ?

Jusqu'à quelques Mo ça va et c'est instantané. Au-delà de 10 Mo le navigateur commence à le sentir, et le gros du coût est le rendu du diff surligné (pas son calcul). Pour de très gros exports (50 Mo+), filtrez d'abord les deux fichiers vers les colonnes ou lignes qui vous intéressent vraiment. csvcut et csvgrep de csvkit, jq pour du CSV converti en JSON, ou un awk/grep rapide font tous l'affaire en pré-passe. Ensuite collez ici la tranche découpée.

Confidentialité et fonctionnement

Votre CSV ne quitte jamais votre navigateur. Le lecteur, le diff et le rendu tournent tous sur votre machine, en local. Pas d'analytics sur votre saisie, pas de logs, pas d'aller-retour cloud "utile". Pour vérifier, ouvrez les DevTools, basculez sur l'onglet Network et regardez. Aucune requête sortante quand vous comparez. La référence de format est RFC 4180, et la documentation du module csv de Python est la référence sur laquelle nous recoupons les cas limites de parseur.