Итак, вы хотите создать список списков ... Нам нужно начать с пустого списка
list_of_lists = []
Далее читаем содержимое файла построчно
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)
Распространенным случаем является использование столбчатых данных, но наши единицы хранения - это строки файла, которые мы прочитали одна за другой, поэтому вы можете захотеть перенести
свой список списков. Это можно сделать с помощью следующей идиомы
by_cols = zip(*list_of_lists)
Другое распространенное использование - дать имя каждому столбцу.
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]
так что вы можете работать с однородными элементами данных
mean_apple_prices = [money/fruits for money, fruits in
zip(by_names['apples revenue'], by_names['apples_sold'])]
Большая часть того, что я написал, может быть ускорена с помощью csv
модуля из стандартной библиотеки. Другой сторонний модуль pandas
позволяет автоматизировать большинство аспектов типичного анализа данных (но имеет ряд зависимостей).
Обновление Хотя в Python 2 zip(*list_of_lists)
возвращается другой (транспонированный) список списков, в Python 3 ситуация изменилась и zip(*list_of_lists)
возвращает объект zip, который не является подписным.
Если вам нужен индексированный доступ, вы можете использовать
by_cols = list(zip(*list_of_lists))
это дает вам список списков в обеих версиях Python.
С другой стороны, если вам не нужен индексированный доступ и вам нужно просто создать словарь, индексированный по именам столбцов, zip-объект - это нормально ...
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