Richiesta di un file CSV


30

Qualcuno sa di un semplice strumento che aprirà un file CSV e ti consentirà di eseguire query SQLesque di base su di esso? Come una sorta di strumento grafico, facile da usare.

So che potrei scrivere un piccolo script per fare un'importazione del CSV in un database SQLite, ma dato che immagino che qualcun altro ci abbia pensato prima, volevo solo chiedermi se ne esistesse uno. Ciò che sta spingendo questa domanda è che mi sento frustrato dalle limitate capacità di filtro di Excel.

Forse qualche altro strumento di manipolazione della visualizzazione dei dati fornirebbe funzionalità simili.

È preferito Free o OSS, ma sono aperto a qualsiasi suggerimento.

MODIFICARE:

Preferirei davvero alcuni tutorial chiari su come fare quanto segue anziché semplicemente "rendere il tuo foglio una voce ODBC" o "scrivere programmi usando file ODBC" o altre idee sulle app da usare. Nota: non riesco a utilizzare MS Access.

Ancora un altro EDIT:

Sono ancora aperto a soluzioni che utilizzano SQLite. La mia piattaforma è un laptop Win2k semi-antico, con un P4 su di esso. È piuttosto lento, quindi una soluzione leggera è l'ideale e probabilmente otterrebbe la vittoria.


Giusto per essere sicuri: sei ancora aperto per soluzioni che utilizzano SQLite? (Come usare i comandi .separator e .import?) E su quale piattaforma sei?
Arjan,

Solo per curiosità: perché non puoi usare MS Access?
Ludwig Weinzierl,

@ Arjan - Sono ancora aperto per soluzioni che utilizzano SQLite. La mia piattaforma è una semi-antica Win2k lappy, con un P4 su di essa. È piuttosto lento, quindi una soluzione leggera è l'ideale e probabilmente otterrebbe la vittoria.
J. Polfer,

2
@fretje - Non devi avere alcuna esperienza con SQLite. Totale 1 MB nel codice sorgente. È usato sui cellulari. L'eseguibile Win32 (motore e tutto) è 300 KB.
J. Polfer,

1
@sheepsimulator: So che è leggero, ma il mio punto è ancora valido ... L'accesso ODBC ai file di testo è sostanzialmente incorporato nel sistema operativo, mentre con SQLite devi ancora installare prima qualcosa e importare il file CSV in un database. Installare nulla è ancora meno che installare qualcosa di molto piccolo, no?
fretje,

Risposte:


13

Hai provato LogParser ?

Il parser dei log è uno strumento potente e versatile che fornisce accesso universale alle query a dati basati su testo come file di registro, file XML e file CSV, nonché a fonti di dati chiave sul sistema operativo Windows® come il registro eventi, il registro, il file system e Active Directory®. Dite a Log Parser quali informazioni sono necessarie e come si desidera che vengano elaborate. I risultati della query possono essere formattati in modo personalizzato nell'output basato su testo oppure possono essere mantenuti su più destinazioni speciali come SQL, SYSLOG o un grafico.

La maggior parte dei software è progettata per eseguire un numero limitato di attività specifiche. Log Parser è diverso ... il numero di modi in cui può essere utilizzato è limitato solo dalle esigenze e dall'immaginazione dell'utente. Il mondo è il tuo database con Log Parser.

Un tutorial (e un altro ) sull'uso del linguaggio di query simile a SQL con i file CSV che ho trovato utilizzando Google .

Query di esempio:

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

Il supporto del forum e molte delle tue domande riceveranno risposta su forums.iis.net/default.aspx?GroupID=51 che è il forum ufficiale di logparser
svandragt

2
Altri esempi su codinghorror.com/blog/archives/000369.html Nice; peccato che sia solo Windows.
Arjan,

34

Penso che OpenOffice.org Database possa fare quello che vuoi. Funziona così.

  1. Avvia Open Office.org Database, mostra " Database Wizard "

  2. Seleziona " Connetti a un database esistente: Testo "

    inserisci qui la descrizione dell'immagine

  3. Specifica il percorso dei file di testo e dettagli come il carattere separatore ecc.

    inserisci qui la descrizione dell'immagine

  4. Creare ed eseguire query

    inserisci qui la descrizione dell'immagine

Se hai mai lavorato con Microsoft Access troverai la GUI familiare.


Se puoi fare a meno di una GUI ci sono sempre i comandi UNIX tradizionali. Li uso molto per fare semplici query a (piccoli) file CSV. Ecco come funziona:

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`

Caspita, ottima risposta! +1
theycallmemorty

Questo sembra solo il trucco. Vedrò se posso OO Base su questo invadente lappy.
J. Polfer,

+1. Freddo! Non si è preoccupato di esplorare OO. Ho sempre pensato che MS O avesse il vantaggio!
Swanand,

! malati come sono le prestazioni per file di grandi dimensioni. Sono in bioinformatica e ho un'enorme spazzatura delimitata da tabulazioni
user2751

@ 1alstew1: per file di grandi dimensioni starei lontano da entrambi i metodi e utilizzerei un vero database. Assicurati anche di utilizzare l'importazione batch (LOAD) per ottenere i dati nel tuo database, è molto più veloce di INSERT.
Ludwig Weinzierl,

13

È possibile utilizzare ODBC per eseguire query sui file di testo:

Accesso ai file di testo tramite il provider di dati ODBC

Nota che non hai bisogno di MS Access perché funzioni, il tutorial nel link sopra usa MS Access per creare il file di testo, ma dato che hai già un file di testo, scorri verso il basso a metà strada e avvia il tutorial dove vedi il titolo Accesso a un file di testo .

Aggiornamento : ho creato un DSN su un file .csv per essere in grado di creare questo tutorial passo dopo passo ... eccolo che arriva:

  • Assicurati che il tuo file .csv sia nella sua directory senza nient'altro.
  • Aprire "ODBC Data Source Administrator" (avvio - pannello di controllo - strumenti di amministrazione - Origini dati (ODBC)).
  • Vai alla scheda File DSN e fai clic su "Aggiungi ...".
  • Scegliere "Microsoft Text Driver (* .txt, * .csv) dall'elenco e fare clic su" Avanti> ".
  • Assegna un nome all'origine dati del file (ad esempio "test") e fai clic su "Avanti>".
  • Fai clic su "Fine" (Successivamente, verrà visualizzata una finestra di dialogo in cui i campi "Nome origine dati" e "Descrizione" sono effettivamente disattivati. Ciò è normale. Nessun problema.
  • Deseleziona la casella di controllo "Usa directory corrente". Il pulsante "Seleziona directory" sarà abilitato.
  • Fai clic sul pulsante "Seleziona directory" e passa alla cartella in cui hai inserito il tuo file .csv nel primo passaggio.
  • Fai clic sul pulsante "Opzioni >>".
  • Fai clic sul pulsante "Definisci formato ...".
  • Nell'elenco "Tabelle" a sinistra, seleziona il tuo file .csv e fai clic sul pulsante "Indovina". (Questo analizzerà il tuo file CSV e creerà un campo appropriato per ogni colonna nel tuo file .csv.)
  • Passa attraverso le colonne generate (F1, F2, ...) nell'elenco a destra, assegna loro nomi significativi e imposta il tipo di dati appropriato (a volte l'indovinare non è sempre corretto).
  • Dopo aver impostato tutto correttamente, fai clic su "OK" (2 volte).

A questo punto dovresti avere un file DSN con il quale puoi accedere al tuo file .csv tramite ODBC. Se si controlla la cartella in cui si trova il file .csv, verrà visualizzato un file schema.ini che contiene la configurazione appena creata. Quando hai più file .csv, ognuno corrisponde a una tabella e ogni tabella avrà un [ blocco nome file .csv] nel file schema.ini in cui sono definite le diverse colonne ... Puoi anche creare / modificare quello schema File .ini direttamente in un editor di testo anziché utilizzare la GUI sopra descritta.

Per quanto riguarda la tua domanda aggiuntiva "come connettersi a questo provider ODBC utilizzando uno strumento di query":
ho uno strumento che mi sono scritto molto tempo fa che non è idoneo per la pubblicazione. Ma una rapida ricerca su Google ha prodotto odbc-view , uno strumento freeware che fa quello che vuoi.
Ho scaricato e installato lo strumento.
Dopo aver avviato lo strumento:

  • Fai clic su "DataSource ...".
  • Seleziona la tua origine dati del file che hai creato in precedenza (ad esempio "test").
  • Nel riquadro delle query digitare "selezionare * da [ nome file .csv]".
  • Fai clic su "Esegui".

Ora dovresti vedere i contenuti del tuo file .csv nel riquadro inferiore.
Spero che questo aiuti ... Fammi sapere come fai o se hai bisogno di ulteriore assistenza.


@fretje - So che non ho bisogno di MS Access perché funzioni, l'ho provato da solo. Ho riscontrato due problemi con questo: 1. Voglio avere una GUI o un'utilità CLI che posso usare per interrogare il CSV-DB con quando ho finito. Il tutorial che hai citato sopra non elenca nulla di ciò, presuppone che tu voglia accedere a questo database ODBC scrivendo un'app .NET. 2. Con il PC utilizzerei questa soluzione, non penso che la mia configurazione ODBC sia sufficiente per seguire questa soluzione. Non ero in grado di nominare il mio DSN al momento della creazione del provider di dati ODBC, la casella era disattivata. Forse un problema di installazione del sistema.
J. Polfer,

@fretje - se puoi spiegare come collegarti a questo provider ODBC usando uno strumento di query, sarebbe carino; Non so come farlo. Stavo cercando una risposta a tutti.
J. Polfer,

8

Mi piace usare R per accedere ai file CSV in modo rapido. Mentre il linguaggio non è direttamente SQL, puoi fare tutte queste cose con semplici comandi in R. R ti offre anche la possibilità di creare bei grafici e molta altra potenza.


5

Puoi sempre leggere il file in Excel e utilizzare Excel come origine dati tramite ODBC ed eseguire query su di esso.


Io posso? Sembra una magia nera. Riesci a trovare un link per un tutorial?
J. Polfer,

2
@sheepsimulator: Excel apre solo i file CSV ... una volta che hai un file Excel, puoi interrogarlo con ODBC proprio come puoi interrogare i file di testo (vedi la mia risposta di seguito).
fretje,

5

Ho scoperto che il modo più semplice per raggiungere questo obiettivo è semplicemente utilizzare la funzionalità di importazione CSV integrata di SQLite:

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

Ora hai un database funzionante che puoi interrogare come preferisci. Ho anche trovato buone le prestazioni di cui sopra, ho appena importato tre milioni di righe in 10-15 secondi.


3

Ho trovato una piccola app non grafica che fa questo: csvsql .

La documentazione è qui .


Questo è ESATTAMENTE il tipo di app che sto cercando, anche se sarebbe bello se avesse una GUI. Purtroppo, in questo momento non ho davvero un buon modo per compilarlo per la finestra di Win2k. Ti risponderò. Inoltre, l'autore non ha usato automake o niente di simile, quindi per compilare è necessario un po 'di jiggerypokery.
J. Polfer,

È stato molto difficile da trovare ed è stata l'unica cosa che ho trovato vicino a quello che hai descritto. Forse un'idea per qualcuno di scrivere un'applicazione che può importare file di testo ed eseguire query SQL su di essi usando, ad esempio, SQL Lite?
Stefan Thyberg,

1
sqlite3(l'applicazione da riga di comando che legge i database SQLite) ha il supporto integrato per l'importazione dei file - vedere i comandi .separator e .import su sqlite.org/sqlite.html
Arjan,

1
Sì, l'ho visto menzionato più volte nelle risposte, ma pensavo più a un'applicazione a forma di blocco note a tutti gli effetti con una finestra di query.
Stefan Thyberg,

3

Puoi dare un'occhiata allo strumento gratuito q - Testo come database , che consente di eseguire SQL direttamente sui file CSV, inclusi join, raggruppamento e qualsiasi altro costrutto SQL. Include anche il rilevamento automatico dei nomi e dei tipi di colonna.

È uno strumento da riga di comando che corrisponde al modo operativo Linux (ad es. Piping da stdin se necessario, flag speciali per personalizzare il comportamento, ecc.).

Utilizza sqlite dietro le quinte, quindi molto leggero e facile da usare.

Divulgazione completa - È il mio strumento open source. Spero lo trovi utile

Harel Ben-Attia


Questo strumento è assolutamente fantastico!
Dawid Ferenczy Rogožan,

2

Uno strumento che ho scoperto che, penso, potrebbe rendere questo più facile in futuro è Resolver One .

È un foglio di calcolo che genera codice Python che è facilmente modificabile. Per coloro che sono sviluppatori e occasionalmente hanno bisogno di "dimettersi" per risolvere i problemi nei fogli di calcolo, questo sembra un modo intuitivo per risolvere i problemi legati ai fogli di calcolo in una lingua che conoscono.

E mi dà una scusa per usare Python. Python mi rende felice.


2

Il driver H2 JDBC offre una funzione csvread molto utile, che consente di eseguire operazioni come le seguenti:

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

Esistono vari modi per utilizzare questo driver senza dover approfondire la scrittura del codice per utilizzarlo.

Personalmente, preferisco Squirrel SQL Client, che offre una buona interfaccia grafica per l'esecuzione di query. Per utilizzarlo, è sufficiente puntare il H2 In-Memorypercorso di classe Driver già elencato sul driver H2 scaricato. Dopo aver impostato un alias adatto utilizzando il driver, è possibile eseguire qualsiasi SQL casuale desiderato. I risultati vengono visualizzati in una bella tabella e ogni sorta di altre funzionalità per l'importazione, l'esportazione, ecc.

In alternativa, è possibile utilizzare Groovy per scrivere uno script rapido da caricare e utilizzare il driver, se necessario. Vedi questo blogpost di esempio per scoprire come.

Sembra che qualcuno abbia esteso lo script groovy sopra e lo abbia trasformato in un simpatico strumento da riga di comando per eseguire le query, vedi gcsvsql. Con questo puoi eseguire comandi come i seguenti:

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

2

Si consiglia di provare strumento Q . È molto leggero, richiede solo Python 2.5 o più recente.




0

Sebbene non sia gratuito, il miglior programma che ho trovato per questo è File Query . A differenza delle altre soluzioni basate sulla riga di comando o che richiedono l'importazione / impostazione del file prima di accedervi, File Query ti consente di aprire un file (anche GB inup come un normale editor di testo e analizzerà automaticamente il layout per te, e ti consente di eseguire quasi tutte le tue query da semplici dialoghi.

È un po 'caro, ma se devi fare qualcosa una volta sola, puoi sempre utilizzare la versione di prova gratuita di 30 giorni. Hanno anche ottime guide e persino video per iniziare.


0

puoi usare WHS. Ad esempio, ho 4 file nella directory '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=,

e 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();
}

Ora fai doppio clic su Hello.js e vedrai sql reqult riga per riga. Consultare la documentazione WHS per visualizzare tutti i risultati della query.


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.