Cómo leer un archivo de texto en una lista o una matriz con Python

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 después de crearlo.

El archivo de texto tiene el siguiente formato:

0,0,200,0,53,1,0,255,...,0. 

Donde el ... 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() 

La salida que obtengo es:

 ['0,0,200,0,53,1,0,255,...,0.'] 1 

Aparentemente, está leyendo el archivo completo en una lista de solo un elemento, en lugar de una lista de elementos individuales. ¿Qué estoy haciendo mal?

Related of "Cómo leer un archivo de texto en una lista o una matriz con Python"

Tendrá que dividir su cadena en una lista de valores usando split()

Asi que,

 lines = text_file.read().split(',') 

El método file.readLines () de python devuelve una lista de las líneas en el archivo:

 f = open('file_name.ext', 'r') x = f.readlines() f.close() 

Ahora deberías poder iterar a través de la matriz de líneas x.

Si desea utilizar el archivo y no tiene que acordarse de cerrarlo después, haga lo siguiente:

 with open('file_name.ext', 'r') as f: x = f.readlines() 

También puedes usar numpy loadtxt como

 from numpy import loadtxt lines = loadtxt("filename.dat", comments="#", delimiter=",", unpack=False) 

Así que quieres crear una lista de listas … Necesitamos comenzar con una lista vacía

 list_of_lists = [] 

A continuación, leemos el contenido del archivo, línea por línea.

 with open('data') as f: for line in f: inner_list = [elt.strip() for elt in line.split(',')] # in alternative, if you need to use the file content as numbers # inner_list = [int(elt.strip()) for elt in line.split(',')] list_of_lists.append(inner_list) 

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 idioma

 by_cols = zip(*list_of_lists) 

Otro uso común es dar un nombre a cada columna.

 col_names = ('apples sold', 'pears sold', 'apples revenue', 'pears revenue') by_names = {} for i, col_name in enumerate(col_names): by_names[col_name] = by_cols[i] 

Para que pueda operar sobre elementos de datos homogéneos.

  mean_apple_prices = [money/fruits for money, fruits in zip(by_names['apples revenue'], by_names['apples_sold'])] 

La mayoría de lo que he escrito se puede acelerar usando el módulo csv , desde la biblioteca estándar. Otro módulo de terceros es pandas , que le permite automatizar la mayoría de los aspectos de un análisis de datos típico (pero tiene varias dependencias).


Actualización Mientras que en Python 2, zip(*list_of_lists) devuelve una lista de listas diferente (transpuesta), en Python 3 la situación ha cambiado y zip(*list_of_lists) devuelve un objeto zip que no se puede subscribir.

Si necesita acceso indexado puede utilizar

 by_cols = list(zip(*list_of_lists)) 

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 simplemente comstackr un diccionario indexado por nombres de columna, un objeto zip está bien …

 file = open('some_data.csv') names = get_names(next(file)) columns = zip(*((x.strip() for x in line.split(',')) for line in file))) d = {} for name, column in zip(names, columns): d[name] = column 

Esta pregunta se refiere a cómo leer el contenido 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 hacerlo es con el módulo csv siguiente manera:

 import csv with open('filename.dat', newline='') as csvfile: spamreader = csv.reader(csvfile, delimiter=',') 

Ahora, puedes iterar fácilmente en el spamreader esta manera:

 for row in spamreader: print(', '.join(row)) 

Vea la documentación para más ejemplos.

 with open('D:\python\positive.txt', 'r') as myfile: data=myfile.read().replace('\n', '')