Lectura columnas de valores de un fichero

Chema Cortes chemacortes en wanadoo.es
Mie Mayo 22 16:20:01 CEST 2002


> Hola,
> 
> Tengo que leer valores en columnas de un fichero de texto. Cada valor ocupa 
> 4 caracteres y hay entre 3-8 valores en cada columna (hay unas 10.000 
> filas). Lo he probado haciendo f.read(4) (evitando los saltos de línea) y 
> me tarda un montón. Hay algun modo mejor de hacerlo? Seria mejor hacer 
> f.readline() y después buscar los valores dentro de la string?

Para ficheros tan grandes, es mejor leer bloques grandes y luego procesarlos en memoria. Lo ideal sería leer todo el fichero con f.read(), pero es mejor no abusar de los recursos cuando se tiene un fichero tan grande. Utiliza f.readline o f.readlines pasando como argumento la cantidad de bytes máxima para leer.

Una vez que tengas una línea, bastará que emplees el rebanado de secuencias. Por ejemplo:

lineas=f.readlines(100000)
col=[ linea[0:4] for linea in lineas ]

Así se obtendría una lista con la primera columna de 4 caracteres. (La lectura del fichero se limita a bloques de 100Kb de memoria).


> Hay alguna 
> forma fácil de
> hacerlo? Se podria aplicar un parser XML aqui (aunque no hay ninguna 
> etiqueta en el fichero)?

Los parser de XML no están pensados para esto. Además existen dos API: DOM y SAX. Para ficheros grandes, el parse que hay que usar es el SAX (procesado secuencial), que es un "wrapper" de la utilidad 'expat'. Para esto, mejor utilizar el comando 'cut' o el awk.

Creo que con el f.readlines no tendrías mayor problema. Si no aciertas con ello, concreta más el problema para que te podamos dar una solución más específica.

> Estoy empezando mi proyecto final de carrera con Python y PyQT, y aunque 
> todo es nuevo para mi, la verdad es que me esta gustando bastante.

Pues ánimo, y ya nos contarás.


Saludos,
-- 
Chema Cortes (chemacortes en wanadoo.es) | 
LinuxUser#142755 - SuSE Linux 8.0
ZARALINUX http://www.zaralinux.org | La 
ignorancia se apodera de quien
PYTANDO http://pytando.sf.net | se contenta con 
lo que sabe
_____________________________________________________________________
No olvides nada. Recuerda los cumpleaños, tus citas, tus cenas románticas y 
todo lo que quieras usando la Agenda personal de Wanadoo.es, desde cualquier 
lugar conectado a Internet. Visítala en http://www.wanadoo.es/agenda






Más información sobre la lista de distribución Python-es