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 rangées du fichier, que nous avons lues une par une, donc vous pouvez souhaiter transposer votre liste de listes. Cela peut être fait avec l'idiome suivant
by_cols = zip(*list_of_lists)
Une autre utilisation courante consiste à 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 la fonction csv
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 qui 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 subscriptable.
Si vous besoin de 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'autre part, si vous n'ont pas besoin accès indexé et que ce que vous voulez est juste de construire un dictionnaire indexé par les noms de colonnes, un objet zip est très bien...
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