Probabilmente non c'è un modo diretto per fare quello che stai chiedendo con un file CSV (a meno che non ti abbia frainteso). Il problema è che non c'è alcun senso significativo in cui ogni file abbia "colonne" a meno che il file non sia appositamente progettato per avere file a larghezza fissa. I file CSV non sono generalmente progettati in questo modo. Sul disco, sono nient'altro che una stringa di gigante:
>>> import csv
>>> with open('foo.csv', 'wb') as f:
... writer = csv.writer(f)
... for i in range(0, 100, 10):
... writer.writerow(range(i, i + 10))
...
>>> with open('foo.csv', 'r') as f:
... f.read()
...
'0,1,2,3,4,5,6,7,8,9\r\n10,11,12,13,14,15,16,17,18,19\r\n20..(output truncated)..
Come si può vedere, i campi di colonna non si allineano prevedibile; la seconda colonna inizia dall'indice 2, ma poi nella riga successiva, la larghezza delle colonne aumenta di uno, eliminando l'allineamento. Ciò è ancora peggiore quando le lunghezze di input variano. Il risultato è che il lettore di csv dovrà leggere l'intero file, buttando fuori i dati che non usi. (Se non ti dispiace, allora questa è la risposta - leggi l'intero file riga per riga, buttando fuori i dati che non utilizzerai.)
Se non ti dispiace sprecare spazio e sapere che nessuno dei tuoi dati sarà più lungo di una larghezza fissa, potresti creare un file con campi a larghezza fissa, e quindi potrai cercarlo attraverso gli offset. Ma poi, una volta fatto, potresti anche iniziare a usare un vero database. PyTables sembra essere la scelta preferita di molti per la memorizzazione di array numpy.
Vedi anche: http://stackoverflow.com/questions/1053928/python-numpy-very-large-matrices –