Я решил в порядке самостоятельного изучения Python-а небольшие примеры разбирать (а то и писать) вместе с коллегой.
Примерно так, как было в анекдоте про лектора: "третий раз объяснил, уже сам понял, а они всё не понимают!!"
Первый пример: есть директория (с вложенными поддиректориями), в них лежат файлы с именами, сформированными по некоторому правилу. Нужные нам директории именуются по дате (в формате YYYYMMDD), + рекурсивно всё, что внутри.
Задача - отобрать файлы позднее определённой даты (по имени папки), перекодировать из MS-DOS в Windows-кодировку, сложить в общую папку кучей.
Пригодился модуль os (os.getcwd(), os.path.join(), os.walk() ), срезы строк, списки списков, списки туплов и пр (os.walk вообще благодатный пример, чтобы увидеть, что такое "простые" питоньи структуры данных).
Также файловые объекты, readlines(), итерация по readlines().
Из хулиганских побуждений впихнул туда ещё и лямбду:
Второй пример, из файла
счёт АКТПАСС 1(или 2)
счёт АКТИВ_ВХ сумма
счёт ПАССИВ_ВХ сумма
счёт ОБОРОТ_ДЕБ сумма
счёт ОБОРОТ КРЕ сумма
....
сделать такой:
счёт,А(П),сумма_вх_актив,сумма_вх_пассив,оборот_деб,оборот_кред,...
другой_счёт,А(П),сумма_вх_актив,сумма_вх_пассив,оборот_деб,оборот_кред,...
Тут удалось показать, что такое словари (получился словарь словарей), keys(), has_key(), sort()
Третий пример, для души - слить на диск содержимое веб-форума, для оффлайнового чтения.
Есть страничка-список тем, считать, отобрать оттуда ссылки определённого вида (на сами темы),
сохранить на диск сами темы, и рядышком сформировать оглавление index.html, корректно ссылающееся на сохранённые файлы.
Пригодились urllib (urllib2), регулярные выражения.
Заточки под общий случай веб-форума не требовалось, парсер строить решили не заморачиваться.
Правда, ещё не дописали - неплохо бы модифицировать ссылки на предыдущую-следующую тему внутри страничек, и до кучи скачивать аттачменты. Самый шик был бы ещё и вырезать из страничек шапки-подвалы-баннеры, но это уже потом.
Примерно так, как было в анекдоте про лектора: "третий раз объяснил, уже сам понял, а они всё не понимают!!"
Первый пример: есть директория (с вложенными поддиректориями), в них лежат файлы с именами, сформированными по некоторому правилу. Нужные нам директории именуются по дате (в формате YYYYMMDD), + рекурсивно всё, что внутри.
Задача - отобрать файлы позднее определённой даты (по имени папки), перекодировать из MS-DOS в Windows-кодировку, сложить в общую папку кучей.
Пригодился модуль os (os.getcwd(), os.path.join(), os.walk() ), срезы строк, списки списков, списки туплов и пр (os.walk вообще благодатный пример, чтобы увидеть, что такое "простые" питоньи структуры данных).
Также файловые объекты, readlines(), итерация по readlines().
Из хулиганских побуждений впихнул туда ещё и лямбду:
outfile.writelines( map ( lambda s: s.decode("cp866").encode("cp1251"), infile.readlines() ))
Второй пример, из файла
счёт АКТПАСС 1(или 2)
счёт АКТИВ_ВХ сумма
счёт ПАССИВ_ВХ сумма
счёт ОБОРОТ_ДЕБ сумма
счёт ОБОРОТ КРЕ сумма
....
сделать такой:
счёт,А(П),сумма_вх_актив,сумма_вх_пассив,оборот_деб,оборот_кред,...
другой_счёт,А(П),сумма_вх_актив,сумма_вх_пассив,оборот_деб,оборот_кред,...
Тут удалось показать, что такое словари (получился словарь словарей), keys(), has_key(), sort()
Третий пример, для души - слить на диск содержимое веб-форума, для оффлайнового чтения.
Есть страничка-список тем, считать, отобрать оттуда ссылки определённого вида (на сами темы),
сохранить на диск сами темы, и рядышком сформировать оглавление index.html, корректно ссылающееся на сохранённые файлы.
Пригодились urllib (urllib2), регулярные выражения.
Заточки под общий случай веб-форума не требовалось, парсер строить решили не заморачиваться.
Правда, ещё не дописали - неплохо бы модифицировать ссылки на предыдущую-следующую тему внутри страничек, и до кучи скачивать аттачменты. Самый шик был бы ещё и вырезать из страничек шапки-подвалы-баннеры, но это уже потом.
no subject
Date: 2009-12-10 06:00 pm (UTC)outfile.writelines( [ s.decode("cp866").encode("cp1251") for s in infile.readlines() ] )
no subject
Date: 2009-12-10 06:39 pm (UTC)я в свое время решал для себя вопрос слива данный с сайтов, где публикуют объявления по недвижимости, а потом эти данные сортировал и анализировал. очень полезный был инструмент.
no subject
Date: 2009-12-10 06:48 pm (UTC)Там их было чуть более чем дофига, и не все статьи коммерсанта были объявлениями о банкротствах, а грабить без разбору весь сайт коммерсанта мы бы не потянули.
В результате я подобным скриптом надёргал индексных страничек, grep-ом из них отсеял только строчки со ссылками, и скормил полученный список старому доброму wget-у.
Питон, конечно, неплох, но по скорости работы питоновский urllib позорно слил wget-у, даже более чем позорно.
Товарищ аналитик, который заказывал эту информацию, слегка офигел от её количества, но уж что именно он потом с ней делал - его проблемы ))
no subject
Date: 2009-12-10 07:21 pm (UTC)