deblan.io-gemini/blog/posts/578.gmi
2020-11-28 17:15:52 +01:00

49 lines
2.5 KiB
Plaintext

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 :
=> https://gitnet.fr/deblan/csv deblan/csv
et
=> https://gitnet.fr/deblan/csv-validator 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 :
=> https://pypi.org/project/csvs-to-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 :
=> https://pypi.org/project/datasette/ datasette
.
Ce sont des outils écrits en Python qui s'installent et s'utilisent en une poignée de secondes.
```{.language-bash data-title="Installation"}
$ sudo pip3 install csvs-to-sqlite datasette
```
Pour illustrer, je vais traiter le fichier CSV de la base officielle des codes postaux disponible sur
=> https://www.data.gouv.fr/fr/datasets/base-officielle-des-codes-postaux/ data.gouv.fr
.
```{.language-bash data-title="Installation"}
$ 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 :
=> https://upload.deblan.org/u/2020-02/5e4e93b5.png datasette [IMG]
Et le plus intéressant pour moi, c'est de pouvoir écrire des requêtes SQL affiner vraiment les données affichées :
=> https://upload.deblan.org/u/2020-02/5e4e93c1.png datasette [IMG]
Enfin, on peut générer un nouveau fichier CSV (ou JSON) avec les données filtrées.
Simple, rapide et efficace !