Deblan blog

Tag #python

Analyser efficacement un fichier CSV

Je travaille régulièrement sur des traitements de fichiers CSV. J'apprécie beaucoup ce format de fichier car il se génère et se lit facilement, qu'on soit informaticien ou non. J'ai d'ailleur écrit 2 librairies PHP pour lire, générer et valider des CSV : deblan/csv et deblan/csv-validator.

Lors des mes analyses, je me confronte parfois à des fichiers qui comportent beaucoup de colonnes et c'est un enfer d'utiliser un tableur pour visualiser et filtrer ces tableaux très larges.

Après quelques recherches, j'ai découvert deux projets qui se complètent à merveille ! Le premier est un outil qui transforme un fichier CSV en une base de données SQLite : csvs-to-sqlite. Le second génère une interface web (avec un serveur web intégré) pour faire des requêtes SQL sur une base de données SQLite : datasette.

Ce sont des outils écrits en Python qui s'installent et s'utilisent en une poignée de secondes.

$ sudo pip3 install csvs-to-sqlite datasette

Pour illustrer, je vais traiter le fichier CSV de la base officielle des codes postaux disponible sur data.gouv.fr.

$ wget -O codes_postaux.csv https://datanova.legroupe.laposte.fr/explore/dataset/laposte_hexasmal/download/\?format\=csv\&timezone\=Europe/Berlin\&use_labels_for_header\=true
$ csvs-to-sqlite -s ";" codes_postaux.csv codes_postaux.db
$ datasette serve codes_postaux.db
Serve! files=('codes_postaux.db',) (immutables=()) on port 8001
INFO:     Started server process [8550]
INFO:     Waiting for application startup.
INFO:     Application startup complete.
INFO:     Uvicorn running on http://127.0.0.1:8001 (Press CTRL+C to quit)

On peut maintenant accéder à http://127.0.0.1:8001 depuis un navigateur et commencer à analyer et traiter les données :

datasette

Et le plus intéressant pour moi, c'est de pouvoir écrire des requêtes SQL affiner vraiment les données affichées :

datasette

Enfin, on peut générer un nouveau fichier CSV (ou JSON) avec les données filtrées.

Simple, rapide et efficace !


Python et Pastebin me voila !

Chez Debian, et surement sur d'autres distributions, existe un paquet nommé « pastebinit ». Ce soft permet de poster du code sur le site pastebin.com afin de le colorer et de le partager facilement avec du monde. Petite note, j'ai sur mon serveur un service de colorisation disponible à l'adresse wall.deblan.fr.

Pastebin a été remis à neuf il y a quelques semaines et le paquet « pastebinit » ne fonctionnait plus. En fait, en plus d'avoir été modifié le front office, l'API a aussi changé.

Bref, c'était assez pénible de ne pas avoir de quoi "paster" (coller) facilement du code en mode console alors j'ai décidé de coder un script qui remplacera pastebinit. Pour ce faire, j'ai eu envie d'utiliser Python.

Licence : BSD.

Pour utiliser le script, il y a deux manières :

1. Si on veut paster (ou "waller") un fichier :

simon@anna:~/python$ cat /mon/fichier/a/paster | ./pastebinit.py

2. Si on veut paster du code qu'on va taper :

simon@anna:~/python$ ./pastebinit.py
vous taper
votre code
et pour arrêter : ctrl+D

Il est évident qu'il faut avoir python d'installé sur sa machine. Pour les debianneux :

# aptitude update && aptitude install python

Si tout ce passe bien, vous devriez recevoir une url (exemple : http://pastebin.com/XdXRMTzZ). Dans le cas contraire, un message d'erreur apparaîtra.