Sie möchten also eine Liste von Listen erstellen ... Wir müssen mit einer leeren Liste beginnen
list_of_lists = []
Als nächstes lesen wir den Dateiinhalt Zeile für Zeile
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)
Ein häufiger Anwendungsfall sind Säulendaten. Unsere Speichereinheiten sind jedoch die Zeilen der Datei, die wir einzeln gelesen haben. Daher möchten Sie möglicherweise
Ihre Listenliste transponieren . Dies kann mit der folgenden Redewendung erfolgen
by_cols = zip(*list_of_lists)
Eine andere häufige Verwendung besteht darin, jeder Spalte einen Namen zu geben
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]
Damit können Sie homogene Datenelemente bearbeiten
mean_apple_prices = [money/fruits for money, fruits in
zip(by_names['apples revenue'], by_names['apples_sold'])]
Das meiste, was ich geschrieben habe, kann mit dem csv
Modul aus der Standardbibliothek beschleunigt werden . Ein weiteres Modul von Drittanbietern pandas
ermöglicht die Automatisierung der meisten Aspekte einer typischen Datenanalyse (weist jedoch eine Reihe von Abhängigkeiten auf).
Update Während in Python 2 zip(*list_of_lists)
kehrt eine andere (umgesetzt) Liste von Listen, in Python 3 hat sich die Situation geändert und zip(*list_of_lists)
kehrt ein Zip - Objekt , das nicht subscriptable ist.
Wenn Sie einen indizierten Zugriff benötigen , können Sie verwenden
by_cols = list(zip(*list_of_lists))
Das gibt Ihnen eine Liste von Listen in beiden Versionen von Python.
Wenn Sie jedoch keinen indizierten Zugriff benötigen und nur ein Wörterbuch erstellen möchten, das durch Spaltennamen indiziert ist, ist ein Zip-Objekt in Ordnung ...
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