viewer .csv en console

32 réponses
Avatar
Kevin Denis
Bonjour,

comme je sais qu'il existe pleins de petits utilitaires en ligne
de commande méconnus, je me demandais s'il y en avait un qui
permettrait de voir des fichiers csv.

Souvent, on cat un .csv, et la largeur des champs des colonnes
fait que ça apparait un peu en vrac:

$ cat file.csv
Jour;nombre de hits;disponibilité;colonne D
Mercredi;8;N;Obiwan
;;;E
Jeudi;Non disponible;;;

et ce n'est pas super simple à lire
si on pouvait avoir:

$ supertool file.csv
Jour; nombre de hits; disponibilité; colonne D
Mercredi; 8; N; Obiwan
; ; ; E
Jeudi; Non disponible; ;

ça serait beaucoup plus pratique.

Une idée?
Merci
--
Kevin

10 réponses

1 2 3 4
Avatar
yamo'
Kevin Denis a écrit le 12/10/2015 10:47 :
Bonjour,

comme je sais qu'il existe pleins de petits utilitaires en ligne
de commande méconnus, je me demandais s'il y en avait un qui
permettrait de voir des fichiers csv.

Souvent, on cat un .csv, et la largeur des champs des colonnes
fait que ça apparait un peu en vrac:

$ cat file.csv
Jour;nombre de hits;disponibilité;colonne D
Mercredi;8;N;Obiwan
;;;E
Jeudi;Non disponible;;;

et ce n'est pas super simple à lire
si on pouvait avoir:

$ supertool file.csv
Jour; nombre de hits; disponibilité; colonne D
Mercredi; 8; N; Obiwan
; ; ; E
Jeudi; Non disponible; ;

ça serait beaucoup plus pratique.

Une idée?
Merci




En cherchant sur duckduckgo, j'ai trouvé :
<http://earthwithsun.com/questions/264003/unix-command-line-csv-viewer>
Je connais mal vim mais apparemment on peut y ajouter un plugin csv.



Le premier exemple avec column n'est pas probant sur ma debian.



--
Stéphane
Avatar
Nicolas Richard
Quelques suggestions sur :

http://stackoverflow.com/questions/1875305/command-line-csv-viewer

Je n'en ai utilisée aucune donc je ne commente pas trop, mais la réponse
avec le plus de votes me parait moins agréable que la seconde solution
(sudo apt-get install csvtool).

Nico.



Kevin Denis writes:

Bonjour,

comme je sais qu'il existe pleins de petits utilitaires en ligne
de commande méconnus, je me demandais s'il y en avait un qui
permettrait de voir des fichiers csv.

Souvent, on cat un .csv, et la largeur des champs des colonnes
fait que ça apparait un peu en vrac:

$ cat file.csv
Jour;nombre de hits;disponibilité;colonne D
Mercredi;8;N;Obiwan
;;;E
Jeudi;Non disponible;;;

et ce n'est pas super simple à lire
si on pouvait avoir:

$ supertool file.csv
Jour; nombre de hits; disponibilité; colonne D
Mercredi; 8; N; Obiwan
; ; ; E
Jeudi; Non disponible; ;

ça serait beaucoup plus pratique.

Une idée?
Merci



--
Nicolas Richard
Avatar
Doug713705
Le 12-10-2015, Kevin Denis nous expliquait dans
fr.comp.os.linux.configuration
() :

Bonjour,

comme je sais qu'il existe pleins de petits utilitaires en ligne
de commande méconnus, je me demandais s'il y en avait un qui
permettrait de voir des fichiers csv.

Souvent, on cat un .csv, et la largeur des champs des colonnes
fait que ça apparait un peu en vrac:

$ cat file.csv
Jour;nombre de hits;disponibilité;colonne D
Mercredi;8;N;Obiwan
;;;E
Jeudi;Non disponible;;;

et ce n'est pas super simple à lire
si on pouvait avoir:

$ supertool file.csv
Jour; nombre de hits; disponibilité; colonne D
Mercredi; 8; N; Obiwan
; ; ; E
Jeudi; Non disponible; ;

ça serait beaucoup plus pratique.

Une idée?



Un bout de python à l'arrache ?

#!/usr/bin/env python
# -*- coding: utf-8

# Nom du fichier à afficher
CSV = './test.txt'

# Largeur des colonnes
COL_WIDTH = 12

file = open(CSV, 'r')

with open(CSV, 'r') as f:
content = f.read().splitlines()
for line in content:
cols = line.split(';')
ft_line = ""
for col in cols:
if len(col) > COL_WIDTH:
col = col[0:COL_WIDTH]
offset = COL_WIDTH - len(col)
col = col + offset * " " + " | "
ft_line += col
print ft_line



Je te laisse le plaisr de gérer les joies des éventuels
différents encodages et autres erreurs possibles ;-)

--
Je ne connaîtrai rien de tes habitudes
Il se peut même que tu sois décédée
Mais j'demanderai ta main pour la couper
-- H.F. Thiéfaine, L'ascenceur de 22H43
Avatar
Francois Lafont
Bonjour,

On 12/10/2015 10:47, Kevin Denis wrote:

$ supertool file.csv
Jour; nombre de hits; disponibilité; colonne D
Mercredi; 8; N; Obiwan
; ; ; E
Jeudi; Non disponible; ;

ça serait beaucoup plus pratique.

Une idée?



Il y a sûrement plus évolué mais perso j'utilise souvent
la commande column pour faire ce genre de chose :

------------------------------------------------------
~$ column -n -s ';' -t /tmp/test.csv
Jour nombre de hits disponibilité colonne D
Mercredi 8 N Obiwan
E
Jeudi Non disponible
------------------------------------------------------

Bon, tu verras dans la page man que column ne possède pas
des tonnes d'options et que c'est peut-être un peu limité.
Par exemple dans la sortie les colonnes sont délimitées par
des espaces et je ne crois pas qu'on puisse changer cela
(et mettre des '|' par exemple). En tout cas, je n'ai pas
trouvé.

--
François Lafont
Avatar
Francois Lafont
Bonjour,

Désolé, je n'avais pas vu que le message était sur 2 groupes.
Du coup, je renvoie mon message, désolé pour le doublon sur
fr.comp.os.unix.

Il y a sûrement plus évolué mais perso j'utilise souvent
la commande column pour faire ce genre de chose :

------------------------------------------------------
~$ column -n -s ';' -t /tmp/test.csv
Jour nombre de hits disponibilité colonne D
Mercredi 8 N Obiwan
E
Jeudi Non disponible
------------------------------------------------------

Bon, tu verras dans la page man que column ne possède pas
des tonnes d'options et que c'est peut-être un peu limité.
Par exemple dans la sortie les colonnes sont délimitées par
des espaces et je ne crois pas qu'on puisse changer cela
(et mettre des '|' par exemple). En tout cas, je n'ai pas
trouvé.


--
François Lafont
Avatar
Nicolas Richard
Doug713705 writes:
Un bout de python à l'arrache ?
[...]
with open(CSV, 'r') as f:
content = f.read().splitlines()
[...]



Si on va sur un vrai langage de programmation, autant utiliser une
library qui parse vraiment le CSV.
Je ne connais pas Python mais DDG me trouve:
https://docs.python.org/2/library/csv.html

L'avantage est que ça va probablement éviter de réfléchir aux soucis
d'encodage (pas sûr), aux différentes "saveurs" de csv (comma-separated,
tab-separated, semi-colon), à la présence du caractère de séparation
dans les champs, à la présence d'un retour à la ligne dans les champs,
et j'en oublie probablement...

On se dit toujours que "boah mes csv sont hyper simples", jusqu'au jour
où on a un besoin non-trivial et pas le temps de retravailler le code
qu'on avait écrit à l'arrache... Ouaip c'est du vécu :)

--
Nico
Avatar
Dominique MICOLLET
Bonjour,

Francois Lafont wrote:
Il y a sûrement plus évolué mais perso j'utilise souvent


....
(et mettre des '|' par exemple). En tout cas, je n'ai pas
trouvé.




On peut, avec la commande tr, remplacer n'importe quoi par n'importe quoi :
- par exemple des " " par des |
- des ; par des tabulations

expand permet de remplacer les tabulations par un nombre quelconque
d'espaces.



tr, cat, column sont des filtres destinés à être "pipés" (1) :


cat le_fichier | tr ';' 't' | expand --tabs

pourrait peut-être faire l'affaire

Cordialement

Dominique

(1) je n'ai pas osé écrire la traductions littérale.
Avatar
Doug713705
Le 12-10-2015, Nicolas Richard nous expliquait dans
fr.comp.os.unix
() :

Doug713705 writes:
Un bout de python à l'arrache ?
[...]
with open(CSV, 'r') as f:
content = f.read().splitlines()
[...]



Si on va sur un vrai langage de programmation, autant utiliser une
library qui parse vraiment le CSV.
Je ne connais pas Python mais DDG me trouve:
https://docs.python.org/2/library/csv.html



Pas faux, c'était une réponse quick&dirty.

L'avantage est que ça va probablement éviter de réfléchir aux soucis
d'encodage (pas sûr), aux différentes "saveurs" de csv (comma-separated,
tab-separated, semi-colon), à la présence du caractère de séparation
dans les champs, à la présence d'un retour à la ligne dans les champs,
et j'en oublie probablement...



Tout l'intérêt d'une bibliothèque bien pensée.

On se dit toujours que "boah mes csv sont hyper simples", jusqu'au jour
où on a un besoin non-trivial et pas le temps de retravailler le code
qu'on avait écrit à l'arrache... Ouaip c'est du vécu :)



Ah ? Toi aussi ? ;)

--
Demain, nous reviendrons avec des revolvers au bout De nos yeux morts...
-- H.F. Thiéfaine, Autorisation de délirer
Avatar
Francois Lafont
On 12/10/2015 13:42, Dominique MICOLLET wrote:

Il y a sûrement plus évolué mais perso j'utilise souvent


....
(et mettre des '|' par exemple). En tout cas, je n'ai pas
trouvé.




On peut, avec la commande tr, remplacer n'importe quoi par n'importe quoi :
- par exemple des " " par des |
- des ; par des tabulations



Oui mais si les champs eux-mêmes contiennent des espaces, ça ne va pas le
faire, c'est pourquoi ça aurait été sympa que la commande column elle-même
possède une option pour lui dire « affiche-moi la sortie avec le caractère
machin comme délimiteur de colonnes ». Enfin je trouve... :)

--
François Lafont
Avatar
Dominique MICOLLET
Bonjour

Francois Lafont wrote:
Il y a sûrement plus évolué mais perso j'utilise souvent


....
(et mettre des '|' par exemple). En tout cas, je n'ai pas
trouvé.




On peut, avec la commande tr, remplacer n'importe quoi par n'importe quoi :
- par exemple des " " par des |
- des ; par des tabulations

expand permet de remplacer les tabulations par un nombre quelconque
d'espaces.



tr, cat, column sont des filtres destinés à être "pipés" (1) :


cat le_fichier | tr ';' 't' | expand --tabs

pourrait peut-être faire l'affaire

Cordialement

Dominique

(1) je n'ai pas osé écrire la traduction littérale.
1 2 3 4