Probablemente no haya una forma directa de hacer lo que está pidiendo con un archivo csv (a menos que no lo haya entendido bien). El problema es que no hay un sentido significativo en el que un archivo tenga "columnas", a menos que el archivo esté especialmente diseñado para tener filas de ancho fijo. Los archivos CSV generalmente no se diseñan de esa manera. En el disco, que son nada más que una cadena 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)..
Como se puede ver, los campos de columna no lo alinea predecible; la segunda columna comienza en el índice 2, pero luego en la siguiente fila, el ancho de las columnas aumenta en uno, arrojando la alineación. Esto es aún peor cuando las longitudes de entrada varían. El resultado es que el lector csv tendrá que leer todo el archivo, descartando los datos que no usa. (Si no le importa eso, entonces esa es la respuesta: lea todo el archivo línea por línea, tirando los datos que no usará).
Si no le importa perder un poco de espacio y saber que ninguno de sus datos será más largo que un ancho fijo, podría crear un archivo con campos de ancho fijo, y luego podría buscar a través de él utilizando compensaciones. Pero luego, una vez que estás haciendo eso, también podrías comenzar a usar una base de datos real. PyTables parece ser la opción favorita de muchos para almacenar matrices numpy.
Vea también: http://stackoverflow.com/questions/1053928/python-numpy-very-large-matrices –