вали в разделе «CSV» главы 8 и счетчик Counter из подраздела «Подсчитываем
элементы с помощью функции Counter()» раздела «Стандартная библиотека
Python» главы 5. Сохраните этот код как zoo_counts.py:
import csv
from collections import Counter
counts = Counter()
with open('zoo.csv', 'rt') as fin:
cin = csv.reader(fin)
for num, row in enumerate(cin):
if num > 0:
counts[row[0]] += int(row[-1])
for animal, hush in counts.items():
print("%10s %10s" % (animal, hush))
400
Приложение Б. За работой
Мы пропустили первый ряд, поскольку в нем содержались только имена коло-
нок. counts — это объект типа Counter, он управляет инициализацией суммы для
каждого типа животного, устанавливая ее равной 0. Мы также применили форма-
тирование, чтобы выровнять выводимую информацию по правому краю. Запустим
наш код:
$ python zoo_counts.py
duck 10
elk 100
bear 800
weasel 50
marmoset 250
Ага! Это был медведь! Он был нашим основным подозреваемым все время, но
теперь у нас есть доказательства.
Далее воссоздадим этот пример с инструментальным средством для обработки
данных Bubbles (http://bubbles.databrewery.org/). Вы можете установить его, введя
следующую команду:
$ pip install bubbles
Он требует наличия SQLAlchemy. Если у вас его нет, вам поможет команда pip
install sqlalchemy. Так выглядит тестовая программа (назовите файл bubbles1.py),
адаптированная из документации (http://bit.ly/py-bubbles):
import bubbles
p = bubbles.Pipeline()
p.source(bubbles.data_object('csv_source', 'zoo.csv', infer_fields=True))
p.aggregate('animal', 'hush')
p.pretty_print()
А теперь момент истины:
$ python bubbles1.py
2014-03-11 19:46:36,806 DEBUG calling aggregate(rows)
2014-03-11 19:46:36,807 INFO called aggregate(rows)
2014-03-11 19:46:36,807 DEBUG calling pretty_print(records)
+--------+--------+------------+
|animal |hush_sum|record_count|
+--------+--------+------------+
|duck | 10| 1|