web-dev-qa-db-fra.com

Interroger un fichier CSV

Est-ce que quelqu'un connaît un outil simple qui ouvrira un fichier CSV et vous permettra de faire des requêtes de base sur SQLesque? Semblable à un outil graphique, facile à utiliser.

Je sais que je pourrais écrire un petit script pour importer le fichier CSV dans une base de données SQLite, mais comme j'imagine que quelqu'un d'autre a pensé à cela avant moi, je voulais simplement savoir s'il en existait un. Cette question est motivée par le fait que les capacités de filtrage limitées d'Excel me frustrent.

Peut-être qu'un autre outil de manipulation de visualisation de données fournirait une fonctionnalité similaire.

Gratuit ou libre est préféré, mais je suis ouvert à toute suggestion.

MODIFIER:

Je préférerais vraiment quelques tutoriels clairs sur la façon de procéder ci-dessous plutôt que de simplement "transformer votre feuille en une entrée ODBC" ou "écrire des programmes utilisant des fichiers ODBC", ou davantage d'idées sur les applications. utiliser. Remarque: je ne peux pas utiliser MS Access.

Encore un autre EDIT:

Je suis toujours ouvert aux solutions utilisant SQLite. Ma plate-forme est un ordinateur portable semi-ancien Win2k, avec un P4 dessus. C'est assez lent, donc une solution avec ressources limitées est idéale et serait probablement gagnante.

30
J. Polfer

Avez-vous essayé LogParser ?

L’analyseur de journaux est un outil puissant et polyvalent qui offre un accès universel aux requêtes sur des données textuelles telles que des fichiers journaux, des fichiers XML et des fichiers CSV, ainsi que sur des sources de données clés sur le système d’exploitation Windows®, telles que le journal des événements, le registre, etc. le système de fichiers et Active Directory®. Vous indiquez à Log Parser les informations dont vous avez besoin et comment vous souhaitez les traiter. Les résultats de votre requête peuvent être mis en forme de manière personnalisée dans une sortie texte ou conservés dans des cibles plus spécialisées telles que SQL, SYSLOG ou un graphique.

La plupart des logiciels sont conçus pour accomplir un nombre limité de tâches spécifiques. Log Parser est différent ... son nombre d'utilisations n'est limité que par les besoins et l'imagination de l'utilisateur. Le monde est votre base de données avec Log Parser.

Un tutoriel (et un n autre ) sur l'utilisation du langage SQL comme le langage de requête avec les fichiers CSV I trouvé à l'aide de Google .

Exemple de requête:

logparser -i:CSV "SELECT TOP 10 Time, Count INTO c:\logparser\test\Chart.GIF 
FROM c:\logparser\test\log.csv ORDER by Time DESC" -charttype:bar3d
13
svandragt

Je pense que base de données OpenOffice.org peut faire ce que vous voulez. Cela fonctionne comme ça.

  1. Démarrez la base de données Open Office.org, l’affiche " Assistant de base de données "

  2. Sélectionnez " Connexion à une base de données existante: Texte "

    enter image description here

  3. Spécifiez le chemin d'accès aux fichiers texte ainsi que des détails tels que le caractère de séparation, etc.

    enter image description here

  4. Créer et exécuter des requêtes

    enter image description here

Si vous avez déjà travaillé avec Microsoft Access, l’interface graphique vous sera familière.


Si vous pouvez vous passer d'une interface graphique, il y a toujours les commandes UNIX traditionnelles. Je les utilise beaucoup pour faire des requêtes simples sur de (petits) fichiers CSV. Voici comment cela fonctionne:

clause      operation   command
-------------------------------
from             join     `join`
where     restriction     `grep`
order by           --     `sort`
group by  restriction      `awk`
having    restriction     `grep`
select     projection      `cut`
distinct  restriction     `uniq`
limit     restriction     `head`
offset    restriction     `tail`
34
Ludwig Weinzierl

Vous pouvez utiliser ODBC pour interroger des fichiers texte:

Accès aux fichiers texte à l'aide du fournisseur de données ODBC

Remarque Si vous n'avez pas besoin de MS Access pour que cela fonctionne, le didacticiel du lien ci-dessus utilise uniquement MS Access pour créer le fichier texte. vous avez déjà un fichier texte, faites défiler à mi-chemin et démarrez le tutoriel où vous voyez le titre Accès à un fichier texte .

Mise à jour : J'ai créé moi-même un DSN sur un fichier .csv pour pouvoir créer ce didacticiel pas à pas ... le voici:

  • Assurez-vous que votre fichier .csv se trouve dans son propre répertoire sans rien d'autre.
  • Ouvrez l’Administrateur de source de données ODBC (Démarrer - Panneau de configuration - Outils d’administration - Sources de données (ODBC)).
  • Allez dans l'onglet Fichier DSN et cliquez sur "Ajouter ...".
  • Choisissez "Pilote Microsoft Text (* .txt, * .csv) dans la liste et cliquez sur" Suivant> ".
  • Donnez un nom à votre source de données de fichier (par exemple "test") et cliquez sur "Suivant>".
  • Cliquez sur "Terminer" (après cela, une boîte de dialogue apparaîtra dans laquelle les champs "Nom de la source de données" et "Description" sont effectivement grisés. Ceci est normal. Aucun souci.
  • Décochez la case "Utiliser le répertoire actuel". Le bouton "Sélectionner le répertoire" sera activé.
  • Cliquez sur le bouton "Sélectionner un répertoire" et naviguez jusqu'au dossier dans lequel vous avez placé votre fichier .csv à la première étape.
  • Cliquez sur le bouton "Options >>".
  • Cliquez sur le bouton "Définir le format ...".
  • Dans la liste de gauche "Tables", sélectionnez votre fichier .csv et cliquez sur le bouton "Deviner". (Cela analysera votre fichier csv et créera un champ approprié pour chaque colonne de votre fichier .csv.)
  • Parcourez les colonnes générées (F1, F2, ...) dans la liste de droite, attribuez-leur des noms significatifs et définissez le type de données approprié (parfois, la conjecture n’est pas toujours correcte).
  • Une fois que tout est configuré correctement, cliquez sur "OK" (2 fois).

À ce stade, vous devez disposer d'un fichier DSN avec lequel vous pouvez accéder à votre fichier .csv via ODBC. Si vous inspectez votre dossier dans lequel le fichier .csv est placé, vous verrez un fichier schema.ini, qui contient la configuration que vous venez de créer. Lorsque vous avez plusieurs fichiers .csv, chacun correspond à une table et chaque table aura un bloc [ nomfichier . Csv] dans le fichier schema.ini dans lequel se trouvent les différentes colonnes. défini ... Vous pouvez également créer/modifier ce fichier schema.ini directement dans un éditeur de texte au lieu d'utiliser l'interface graphique décrite ci-dessus.

En ce qui concerne votre question supplémentaire "comment se connecter à ce fournisseur ODBC à l'aide d'un outil de requête":
J'ai un outil que j'ai moi-même écrit il y a longtemps et qui n'est pas admissible à la publication. Mais une recherche rapide sur Google a abouti à odbc-view , un outil gratuit qui fait ce que vous voulez.
J'ai téléchargé et installé l'outil.
Après le démarrage de l'outil:

  • Cliquez sur "DataSource ...".
  • Sélectionnez votre source de données de fichier que vous avez créée précédemment (par exemple, "test").
  • Dans le volet de requête, tapez "select * from [ nom_fichier . Csv]".
  • Cliquez sur "Exécuter".

Vous devriez maintenant voir le contenu de votre fichier .csv dans le volet inférieur.
J'espère que cela vous aidera ... Faites-moi savoir comment vous faites ou si vous avez besoin d'aide.

13
fretje

J'aime utiliser R pour accéder rapidement aux fichiers csv. Bien que le langage ne soit pas directement SQL, vous pouvez faire toutes ces choses avec des commandes simples en R. R vous offre également la possibilité de créer des graphes de Nice et de nombreuses autres puissances.

8
Christian

Vous pouvez toujours lire le fichier dans Excel et utiliser Excel comme source de données via ODBC et exécuter des requêtes sur celui-ci.

5
m.floryan

Vous pouvez consulter l'outil gratuit q - Texte en tant que base de données , qui permet d'exécuter directement du code SQL sur des fichiers csv, notamment des jointures, des regroupements et toute autre construction SQL. Inclut également la détection automatique des noms et des types de colonne.

C'est un outil de ligne de commande qui correspond au mode de fonctionnement Linux (par exemple, Piping à partir de stdin si nécessaire, indicateurs spéciaux pour la personnalisation du comportement, etc.).

Utilise sqlite dans les coulisses, donc très léger et facile à utiliser.

Divulgation complète - C'est mon propre outil open source. J'espère que vous le trouverez utile

Harel Ben-Attia

3
Harel Ben Attia

J'ai trouvé une petite application non graphique qui fait ceci: csvsql .

La documentation est ici .

3
Stefan Thyberg

J'ai trouvé que le moyen le plus simple d'y parvenir consiste simplement à utiliser la fonctionnalité d'importation CSV intégrée de SQLite:

  1. sqlite3 mydatabase.sqlite
  2. sqlite> .mode csv
  3. sqlite> .import mydata.csv <tablename>

Maintenant, vous avez une base de données de travail que vous pouvez interroger comme vous le souhaitez. J'ai également constaté que les performances de ce qui précède étaient bonnes. Je viens d'importer trois millions de lignes en 10-15 secondes.

J'ai écrit un programme en ligne de commande pour exécuter du SQL arbitraire sur des fichiers csv, y compris des jointures de plusieurs fichiers, appelés gcsvsql. Vous pouvez lire à ce sujet ici:

http://bayesianconspiracy.blogspot.com/2010/03/gcsvsql.html

Il existe un projet de code Google pour cela ici: http://code.google.com/p/gcsvsql/

Il est écrit en Java/Groovy et s’exécutera partout où Java est disponible.

Edit: Projet actif déplacé vers github. https://github.com/jdurbin/durbinlib

2
James Durbin

Je pense que l’outil qui facilitera les choses dans le futur est premier résolveur .

C'est un tableur qui génère un code Python facilement modifiable. Pour ceux qui sont développeurs et qui ont parfois besoin de "démissionner" pour résoudre des problèmes dans les feuilles de calcul, cela semble être un moyen intuitif de résoudre des problèmes similaires à ceux d'une feuille de calcul dans une langue qu'ils connaissent bien.

Et cela me donne une excuse pour utiliser Python. Le python me rend heureux.

2
J. Polfer

Le pilote H2 JDBC fournit une fonction très utile de csvread, qui vous permet d’effectuer les opérations suivantes:

select * from csvread(test1.csv) test1 
inner join csvread(test2.csv2) test2
on test1.id = test2.foreignkey

Il existe différentes manières d'utiliser ce pilote sans avoir à se plonger dans l'écriture de code pour l'utiliser.

Personnellement, je préfère le Squirrel SQL Client , qui vous fournit une interface graphique conviviale pour l'exécution de requêtes. Pour l'utiliser, il vous suffit de pointer le chemin de classe H2 In-Memory déjà indiqué sur le pilote H2 que vous avez téléchargé. Une fois que vous avez configuré un alias approprié à l'aide du pilote, vous pouvez exécuter le code SQL aléatoire souhaité. Les résultats sont affichés dans une table Nice et toutes sortes d'autres fonctionnalités pour importer, exporter, etc.

Alternativement, vous pouvez utiliser Groovy pour écrire un script rapide pour charger et utiliser le pilote si nécessaire. Voir cet exemple blogpost pour savoir comment.

Il semble que quelqu'un a étendu le script groovy ci-dessus et en a fait un outil de ligne de commande de Nice pour exécuter les requêtes, voir gcsvsql. Avec cela, vous pouvez exécuter des commandes comme suit:

gcsvsql "select * from people.csv where age > 40"
2
lstg

Vous voudrez peut-être essayer outil Q . Il est très léger et ne nécessite que Python 2.5 ou plus récent.

1
agrrd

Deux autres options pour cette tâche: querycsv et fsql . Querycsv est Python et utilise sqlite3. Fsql est Perl et utilise DBD :: CSV .

1
Nelson

vous pouvez utiliser WHS. Par exemple, j'ai 4 fichiers dans le répertoire 'C:\Users\user837\Desktop\t4': 1.txt

id;sex_ref;sale
1;1;10
2;2;30
3;1;20

2.txt

sex_id;name
1;male
2;female

schema.ini

[1.txt]
Format=Delimited(;)
ColNameHeader=True
MaxScanRows=50
DecimalSymbol=,
[2.txt]
Format=Delimited(;)
ColNameHeader=True
MaxScanRows=50
DecimalSymbol=,

et Hello.js

WScript.Echo("Hello World!");
var cn = new ActiveXObject("ADODB.Connection");
cn.Open("Provider=Microsoft.Jet.OLEDB.4.0;Data Source=\"C:\\Users\\user837\\Desktop\\t4\";Extended Properties=\"text;HDR=NO;FMT=Delimited\"");

var rs = cn.Execute("select * from 1.txt as t1 left join 2.txt as t2 on t1.sex_ref = t2.sex_id");

while (!rs.EOF) 
{
    WScript.Echo(           rs.Fields("id").Value
                  + "###" + rs.Fields("sex_ref").Value
                  + "###" + rs.Fields("name").Value
                );
    rs.moveNext();
}

Maintenant, double-cliquez sur Hello.js et vous verrez sql reqult ligne par ligne. Voir la documentation WHS pour voir tous les résultats de la requête.

0
Oleg

Il existe un plugin Notepad ++, CsvQuery, pour exécuter des requêtes SQL sur des fichiers CSV ouverts dans npp. https://github.com/jokedst/CsvQuery

0
Greck

Bien que n'étant pas gratuit, le meilleur programme que j'ai trouvé pour cela est File Query . À la différence des autres solutions basées sur la ligne de commande ou nécessitant d'importer/configurer le fichier avant de pouvoir y accéder, File Query vous permet d'ouvrir un fichier (même des Go insérés comme un éditeur de texte normal) et d'analyser automatiquement la mise en page pour vous. et vous permettent de faire presque toutes vos requêtes à partir de simples dialogues.

C'est un peu cher, mais si vous ne devez faire qu'une chose, vous pouvez toujours utiliser la version d'essai gratuite de 30 jours. Ils ont également une grande guides et même des vidéos pour vous aider à démarrer.

0
Jeffrey Harmon