J'avais une trace de ce que j'ai fait le mois dernier, mais une note quand je l'ai compilée. Comme indiqué ci-dessous, les données sont enregistrées au format CSV, et elles sont agrégées pour chaque colonne. (De plus, même si vous avez un indice en regardant les chiffres, veuillez le parcourir avec brio.)
4000,2000,5000,7000,20
4000,2000,5000,7000,20
4000,2000,5000,7000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,3500,6010,6000,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
4000,2000,5210,5200,20
6000,5000,7000,2000,20
4000,6000,6000,2000,20
1500,1500,2000,1000,20
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
1500,1500,2000,1000,1
La seule doublure à traiter est la suivante.
Bon mot
python -c "import csv;print([sum([int(m) for m in materials]) for materials in zip(*csv.reader(open('big.txt')))])"
Tout d'abord, lisez CSV. Donnez l'objet fichier ouvert à l'objet lecteur du module csv. Puisque l'objet de lecture est itérable, il peut être tourné avec for.
>>> import csv
>>> for r in csv.reader(open('big.txt')):
... print(r)
...
['4000', '2000', '5000', '7000', '20']
['4000', '2000', '5000', '7000', '20']
['4000', '2000', '5000', '7000', '20']
['4000', '3500', '6010', '6000', '20']
…
Ensuite, utilisez la fonction zip pour agréger les valeurs de chaque colonne. L'objet zip renvoyé par la fonction zip est également itérable, vous pouvez donc l'utiliser de la même manière. On peut voir que les valeurs de chaque colonne sont agrégées en tuple.
>>> z = zip(*csv.reader(open('big.txt')))
>>> for entry in z:
... print(entry)
...
('4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '4000', '6000', '4000', '1500', '1500', '1500', '1500', '1500', '1500', '1500', '1500')
('2000', '2000', '2000', '3500', '3500', '3500', '3500', '3500', '3500', '3500', '3500', '2000', '2000', '2000', '2000', '2000', '5000', '6000', '1500', '1500', '1500', '1500', '1500', '1500', '1500', '1500')
('5000', '5000', '5000', '6010', '6010', '6010', '6010', '6010', '6010', '6010', '6010', '5210', '5210', '5210', '5210', '5210', '7000', '6000', '2000', '2000', '2000', '2000', '2000', '2000', '2000', '2000')
('7000', '7000', '7000', '6000', '6000', '6000', '6000', '6000', '6000', '6000', '6000', '5200', '5200', '5200', '5200', '5200', '2000', '2000', '1000', '1000', '1000', '1000', '1000', '1000', '1000', '1000')
('20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '20', '1', '1', '1', '1', '1', '1', '1')
Enfin, utilisez la fonction sum pour additionner les valeurs du tuple. Cependant, puisque la valeur lue par csv.reader est une chaîne de caractères, il est nécessaire de la convertir en int puis de la donner à la fonction sum.
>>> z = zip(*csv.reader(open('big.txt')))
>>> for entry in z:
... print(sum([int(e) for e in entry]))
...
86000
67000
118130
107000
387