Entonces desea 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 modismo
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 con 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 parte de lo que he escrito se puede acelerar utilizando el csv
módulo, de 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 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 y zip(*list_of_lists)
devuelve un objeto zip que no es subscriptable.
Si necesita acceso indexado, puede usar
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 crear 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