Vous voulez donc créer une liste de listes ... Nous devons commencer par une liste vide
list_of_lists = []
ensuite, nous lisons le contenu du fichier, ligne par ligne
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 cas d'utilisation courant est celui des données en colonnes, mais nos unités de stockage sont les lignes du fichier, que nous avons lues une par une, vous pouvez donc vouloir transposer
votre liste de listes. Cela peut être fait avec l'idiome suivant
by_cols = zip(*list_of_lists)
Une autre utilisation courante est de donner un nom à chaque colonne
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]
afin de pouvoir opérer sur des éléments de données homogènes
mean_apple_prices = [money/fruits for money, fruits in
zip(by_names['apples revenue'], by_names['apples_sold'])]
La plupart de ce que j'ai écrit peut être accéléré en utilisant le csv
module, de la bibliothèque standard. Un autre module tiers est pandas
, qui vous permet d'automatiser la plupart des aspects d'une analyse de données typique (mais a un certain nombre de dépendances).
Mise à jour Alors que dans Python 2 zip(*list_of_lists)
renvoie une liste différente (transposée) de listes, dans Python 3, la situation a changé et zip(*list_of_lists)
renvoie un objet zip qui n'est pas en indice.
Si vous avez besoin d'un accès indexé, vous pouvez utiliser
by_cols = list(zip(*list_of_lists))
qui vous donne une liste de listes dans les deux versions de Python.
D'un autre côté, si vous n'avez pas besoin d'un accès indexé et que vous voulez simplement créer un dictionnaire indexé par noms de colonnes, un objet zip convient parfaitement ...
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