Então você quer criar uma lista de listas ... Precisamos começar com uma lista vazia
list_of_lists = []
Em seguida, lemos o conteúdo do arquivo, linha por linha
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)
Um caso de uso comum é o de dados colunares, mas nossas unidades de armazenamento são as linhas do arquivo que lemos uma a uma, portanto, convém transpor
sua lista de listas. Isso pode ser feito com o seguinte idioma
by_cols = zip(*list_of_lists)
Outro uso comum é dar um nome a cada coluna
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 você possa operar em itens de dados homogêneos
mean_apple_prices = [money/fruits for money, fruits in
zip(by_names['apples revenue'], by_names['apples_sold'])]
A maior parte do que escrevi pode ser acelerada usando o csv
módulo, da biblioteca padrão. Outro módulo de terceiros é o pandas
que permite automatizar a maioria dos aspectos de uma análise de dados típica (mas possui várias dependências).
Atualização Enquanto no Python 2 zip(*list_of_lists)
retorna uma lista diferente (transposta) de listas, no Python 3 a situação mudou e zip(*list_of_lists)
retorna um objeto zip que não pode ser subscrito.
Se você precisar de acesso indexado, poderá usar
by_cols = list(zip(*list_of_lists))
que fornece uma lista de listas nas duas versões do Python.
Por outro lado, se você não precisa de acesso indexado e o que você deseja é apenas criar um dicionário indexado por nomes de colunas, um objeto zip é adequado ...
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