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