Отже, ви хочете створити список списків ... Почати потрібно з порожнього списку
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)
повертає поштовий об'єкт, який не піддається підключенню.
Якщо вам потрібен індексований доступ, ви можете скористатися
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