>_ DevTrendsfr

Langue

Accueil

Langages

Sections

Frontend Backend Mobile DevOps AI / ML GameDev Blockchain Embarqué Sécurité
Python

Dompter le chaos des tableaux directement depuis le terminal

Build status Coverage status PyPI downloads Version License Support Python versions

Si vous recevez régulièrement des exports de données, vous connaissez probablement la galère. Un fichier de trois cents mégaoctets, encodage Windows-1251, le délimiteur est un point-virgule à certains endroits et une virgule à d'autres, et il y a des sauts de ligne non échappés à l'intérieur des lignes. Ouvrir ça dans Excel est un moyen infaillible de figer complètement votre suite bureautique ou de supprimer accidentellement les zéros non significatifs des numéros de téléphone. Écrire un petit script Python avec pandas juste pour faire une vérification rapide est également fastidieux.

Dans de telles situations, csvkit vient à la rescousse — un ensemble d'utilitaires en ligne de commande pour travailler avec des données tabulaires. Le projet est sur GitHub depuis 2011, a recueilli plus de 6400 étoiles, et reste toujours l'un des moyens les plus pratiques pour analyser des CSV directement dans bash.

Ce que cet ensemble d'utilitaires peut faire

Les créateurs du package, le média Wire Services, se sont inspirés d'outils comme pdftk et GDAL. L'idée est simple : donner aux développeurs et aux analystes de données un ensemble de commandes spécialisées pour les pipelines UNIX permettant de nettoyer, trier, formater et explorer des fichiers tabulaires sans écrire de code.

Les utilitaires sont répartis par tâche : conversion, découpage, analyse et exécution de requêtes SQL.

Aperçu rapide et statistiques de base

La commande csvlook transforme un CSV brut en un beau tableau ASCII avec un alignement correct des colonnes. Combinée avec head ou less, vous obtenez un excellent aperçu :

head -n 20 data.csv | csvlook

Si vous avez besoin de comprendre la structure d'un fichier inconnu, exécutez csvstat. L'utilitaire analyse les types de données dans chaque colonne, trouve les valeurs manquantes, calcule le minimum, le maximum, la moyenne et affiche une liste des valeurs les plus fréquentes :

csvstat data.csv

Découpage et filtrage

Les utilitaires UNIX traditionnels comme cut et grep tombent souvent en panne sur des CSV complexes lorsque des virgules ou des sauts de ligne apparaissent à l'intérieur de champs entre guillemets. Le package propose des alternatives spécialisées :

csvcut découpe les colonnes nécessaires par nom ou par numéro :

csvcut -c "user_id,email,status" users.csv > clean_users.csv

csvgrep filtre les lignes par valeurs ou expressions régulières :

csvgrep -c "status" -m "active" users.csv

SQL directement sur les fichiers

L'une des commandes les plus pratiques est csvsql. Elle peut faire deux choses. Premièrement, elle génère un schéma DDL pour PostgreSQL, MySQL ou SQLite en analysant les types de données dans le fichier. Deuxièmement, elle vous permet d'écrire des requêtes SQL directement sur des fichiers CSV sur le disque via SQLite intégré :

csvsql --query "select status, count(*) from users group by status" users.csv

Vous pouvez également joindre deux fichiers différents comme s'il s'agissait de tables de base de données régulières :

csvsql --query "select u.name, o.total from users u join orders o on u.id = o.user_id" users.csv orders.csv

Conversion de formats

L'outil in2csv convertit à peu près tout en CSV : fichiers Excel (.xls et .xlsx), JSON, NDJSON et format à largeur fixe. Pas besoin de lancer Excel juste pour réenregistrer un rapport reçu :

in2csv report.xlsx --sheet "Sales" > sales.csv

Comment ça fonctionne en interne

Le package est écrit en Python et distribué via PyPI. Il utilise SQLAlchemy pour les opérations de base de données, ce qui explique la flexibilité de csvsql lorsqu'il travaille avec différents dialectes SQL.

Le principal avantage de l'architecture est la compatibilité avec l'entrée et la sortie standard (stdin/stdout). Les commandes sont facilement enchaînées via un pipe classique :

in2csv data.xlsx | csvgrep -c "country" -m "RU" | csvcut -c 1,3,5 | csvlook

Cependant, cette approche a un revers. Comme la bibliothèque est écrite en Python pur avec vérification des types à l'exécution, les performances chutent sur les fichiers de plusieurs gigaoctets. Pour les exports à l'échelle du téraoctet, vous feriez mieux d'utiliser xsv en Rust ou duckdb, mais pour les tâches quotidiennes jusqu'à quelques centaines de mégaoctets, la vitesse de csvkit est plus que suffisante.

Où cela s'avère utile en pratique

  1. Vérifier la structure des données sur un serveur distant sans interface graphique.
  2. Nettoyer les fichiers en amont dans des scripts bash avant de les charger dans un pipeline ETL.
  3. Générer des schémas de tables de base de données pour un nouvel export (csvsql -i postgresql data.csv).
  4. Fusionner rapidement deux fichiers disparates par une clé commune via csvjoin.

Cela vaut-il la peine d'être installé

Le package s'installe avec une seule commande pip :

pip install csvkit

Si vous analysez régulièrement des logs, travaillez avec des imports de base de données ou recevez des rapports sous forme d'archives avec Excel et CSV, cet ensemble d'utilitaires vous fera gagner beaucoup de nerfs. Il élimine le besoin d'ouvrir un éditeur lourd ou d'écrire des scripts ponctuels pour le filtrage basique de deux colonnes. Commencez par csvlook et in2csv — ils rentabilisent l'installation dans les cinq premières minutes d'utilisation.

Projets similaires