Простой Python. современный стиль программирования - читать онлайн бесплатно полную версию книги . Страница 309

и швов пусть займется интерн). Мы используем модуль csv, который рассматри-

вали в разделе «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|