Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

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