Estoy tratando de leer las líneas de un archivo de texto en una lista o matriz en python. Solo necesito poder acceder individualmente a cualquier elemento de la lista o matriz una vez creado.
El archivo de texto tiene el siguiente formato:
0,0,200,0,53,1,0,255,...,0.
Donde ...
está arriba, el archivo de texto real tiene cientos o miles de elementos más.
Estoy usando el siguiente código para intentar leer el archivo en una lista:
text_file = open("filename.dat", "r")
lines = text_file.readlines()
print lines
print len(lines)
text_file.close()
El resultado que obtengo es:
['0,0,200,0,53,1,0,255,...,0.']
1
Aparentemente, está leyendo el archivo completo en una lista de un solo elemento, en lugar de una lista de elementos individuales. ¿Qué estoy haciendo mal?
Respuestas:
Tendrá que dividir su cadena en una lista de valores usando
split()
Entonces,
fuente
.csv
de archivos (como se ha mencionado por el OP), por ejemplo, un archivo que contiene los caracteres alfabéticos 3 por fila (a,b,c
,d,e,f
, etc.) y aplicar el procedimiento descrito anteriormente lo que se obtiene es una lista como esta:['a', 'b', 'c\nd', 'e', ... ]
(tenga en cuenta el artículo'c\nd'
). Me gustaría agregar que, el problema anterior no es comprensivo, este procedimiento colapsa los datos de filas individuales en una sola megalista, generalmente no es lo que quiero al procesar un archivo de datos orientado a registros.csv
módulo o algún otro analizador existenteTambién puedes usar numpy loadtxt como
fuente
dtype : data-type
parámetro. docs.scipy.org/doc/numpy/reference/generated/numpy.loadtxt.html Pandas read_csv es muy fácil de usar. Pero no vi una manera de especificar el formato. Estaba leyendo flotantes de mi archivo, mientras que necesitaba una cadena. Gracias @Thiru por mostrar loadtxt.Entonces desea crear una lista de listas ... Necesitamos comenzar con una lista vacía
a continuación, leemos el contenido del archivo, línea por línea
Un caso de uso común es el de los datos en columnas, pero nuestras unidades de almacenamiento son las filas del archivo, que hemos leído una por una, por lo que es posible que desee transponer su lista de listas. Esto se puede hacer con el siguiente modismo
Otro uso común es dar un nombre a cada columna.
para que pueda operar con elementos de datos homogéneos
La mayor parte de lo que he escrito se puede acelerar utilizando el
csv
módulo, de la biblioteca estándar. Otro módulo de terceros espandas
, que le permite automatizar la mayoría de los aspectos de un análisis de datos típico (pero tiene una serie de dependencias).Actualización Mientras que en Python 2
zip(*list_of_lists)
devuelve una lista diferente (transpuesta) de listas, en Python 3 la situación ha cambiado yzip(*list_of_lists)
devuelve un objeto zip que no es subscriptable.Si necesita acceso indexado, puede usar
eso te da una lista de listas en ambas versiones de Python.
Por otro lado, si no necesita acceso indexado y lo que desea es crear un diccionario indexado por nombres de columna, un objeto zip está bien ...
fuente
csv
módulo ...Esta pregunta es cómo leer los contenidos de valores separados por comas de un archivo en una lista iterable:
0,0,200,0,53,1,0,255,...,0.
La forma más fácil de hacer esto es con el
csv
módulo de la siguiente manera:Ahora, puedes iterar fácilmente
spamreader
así:Ver documentación para más ejemplos.
fuente