[Python] Algoritmo in CSV

Paolo lordkrandel a gmail.com
Mar 7 Set 2010 08:30:39 CEST


> > From: vittorio.zuccala a gmail.com
> > Date: Thu, 2 Sep 2010 14:41:10 +0200
> > To: python a lists.python.it
> > Subject: [Python] Algoritmo in CSV
> > Buongiorno,

> > chiedo consiglio su un algoritmo da usare che sia veloce.
> > Anche solo in meta-codice.

> > Problema:
> > - carico un CSV con 200 colonne e 2 milioni di righe
> > - voglio trovare la lunghezza maggiore per ogni campo
> > Ecco: il mio problema è che vengono effettuati 200*2.000.000 di IF e

> > la cosa non mi piace molto.
> > Qualcuno ha un consiglio per ottimizzare?

Si potrebbe
1) Aumentare l'approssimazione, se non è richiesta l'assoluta
precisione. Ad esempio, si potrebbe fare una valutazione statistica
delle prime X righe, vedere qual'è grossomodo la distribuzione
e approssimare una stima.
Se la questione che devi creare un campo abbastanza largo per
contenere i dati della colonna, ma senza sprecare spazio,
puoi abbondare sulla stima dello spazio richiesto di qualche punto.

2) Fare delle generalizzazioni: assumere magari che se la singola
linea del CSV è più corta di Y, quella riga sicuramente non conterrà
i record più lunghi. Può essere utile se i campi hanno più o meno
una grandezza sempre uguale e non sono descrittivi o note

3) Credo che invece di spezzare il CSV in stringhe, e poi calcolarne
la lunghezza, si possa leggere l'intero file memorizzando le posizioni
di virgole e acapo, leggendo un carattere alla volta.
Forse può aiutare con le prestazioni, lasciando fuori lo spezzettamento
della riga del CSV, la relativa memorizzazione, la creazione di un
dizionario, etc.

Dipende molto se questo algoritmo lo devi usare una o più volte,
sullo stesso CSV o su tanti CSV diversi... Altrimenti se devi lavorare
a lungo su una bestia del genere e non solo confrontare le lunghezze,
ti direi di mettere tutto in un db.

Comunque che un po' di letteratura online ci sia a riguardo dei grandi
dataset.

> > Grazie in anticipo.

-------
Wyrmskull <lordkrandel a gmail.com>


Maggiori informazioni sulla lista Python