Chargement ETL en échec après changement de format du fichier source
```text UnicodeDecodeError: 'utf-8' codec can't decode byte 0xe9 in position 1532 pandas.errors.ParserError: Expected 8 fields in line 214, saw 11 ```
Détecter
Le tableau de bord du matin affiche des chiffres à zéro ; le traitement nocturne d'import a échoué ou chargé des colonnes décalées.
Symptômes
Le tableau de bord du matin affiche des chiffres à zéro ; le traitement nocturne d'import a échoué ou chargé des colonnes décalées.
Environnement
Script Python (pandas) lisant un export CSV fourni par un système tiers, chargement dans l'entrepôt.
Cause racine
Le fournisseur a changé son export : encodage Windows-1252 au lieu d'UTF-8 et séparateur ; au lieu de ,, avec des montants au format 1 234,56.
Diagnostic
file -i export.csv
head -3 export.csv | cat -A
python3 -c "import csv;print(csv.Sniffer().sniff(open('export.csv',encoding='cp1252').read(4096)).delimiter)"
Solution
Lecture explicite et validation avant chargement :
df = pd.read_csv("export.csv", sep=";", encoding="cp1252", decimal=",", thousands=" ")
assert set(EXPECTED_COLUMNS) <= set(df.columns), "schéma inattendu"
Recharger la journée manquante après correction.
Commandes
iconv -f WINDOWS-1252 -t UTF-8 export.csv > export.utf8.csv
python3 etl.py --date 2026-09-23 --reload
Prévention
Contrat d'interface avec le fournisseur (format, encodage, schéma), validation de schéma bloquante (Great Expectations), alerte sur volume de lignes anormal, zone de quarantaine pour les fichiers invalides.