Pythonクックブックを読んでいる(3)
2009年2月28日
1. dateutilパッケージ
標準のdateモジュールには無い便利機能を提供してくれる、サードパーティのパッケージ。
例えば、timedeltaには出来ない「月や年の加減算」や「月初日と月末日の取得」といった、ありがちな処理を提供してくれる。
>>> import datetime >>> from dateutil import relativedelta >>> one_day = datetime.date(2009, 3, 15) >>> one_day datetime.date(2009, 3, 15) >>> one_day + relativedelta.relativedelta(months=1) # 1月加算 datetime.date(2009, 4, 15) >>> one_day + relativedelta.relativedelta(day=1) # 月初 datetime.date(2009, 3, 1) >>> one_day + relativedelta.relativedelta(day=99) # 月末 datetime.date(2009, 3, 31)
Python標準だと、日時はローカルな環境の影響を受けやすい部分なので、方針として便利な機能よりも安定した機能のみを提供するようにしている・・・
・・・と、もっと端的にいうと「標準だと不便」なので、このパッケージはとてもありがたい。
常に必要かは考えどころだけど、カレンダー機能を作るような場合は、是非是非使いたい!
ダウンロード) http://labix.org/python-dateutil
※setup.pyではなく手動でdateutilディレクトリだけ配置してもtest.pyは通ったので、プロジェクト単位でも使用可能っぽい。
2. weekday()
>>> import datetime, calendar >>> today = datetime.date.today() >>> today datetime.date(2009, 2, 28) >>> today.weekday() == calendar.SATURDAY True
Python的に勉強になったというよりは、
「曜日が日付から一意で決まるものである」という、リアル仕様の方にガッテンした。
3. raw_input
章のテーマに無関係だけど、目に止まったので。
[y/N] を要求するような対話的なスクリプトを書くときにraw_inputという組み込み関数が使えるようだ。
raw_input.py
print "Start prompting." while True: cmd = raw_input() if cmd == "q": break else: print cmd * 3 print "Completed prompting."
実行、入力を3倍にして標準出力へ返すか、qを入力すると終了する。
$python raw_input.py Start prompting. aiueo aiueoaiueoaiueo Ask him! Ask him!Ask him!Ask him! URUSE-YO! URUSE-YO!URUSE-YO!URUSE-YO! q Completed prompting.
おー、おもしれー。
本のサンプルでは、入力を受け取るときにありがちなエラー周りも実装してくれていたので、何か作るときは参考になる。
デプロイ用にインタラクティブなスクリプトを提供する・・・とかも出来るなー。
4. Decimalモジュール
お金周りとか、シビアに十進数で計算する必要がある場合は、Decimalモジュールを使うべし。
ただ、記述が面倒なモジュールなので、何かしらラッパクラス/関数は作った方がいいかも・・・。
全体的に「これ必要かな?」というような、細かいネタが多かった気がする。
ざっくりと、日時周りで困ったらdateutilで、ちょっと頑張りたかったらクックブックを開こうか・・・という風に把握させていただいた。
まぁ、頑張らないんですけどね!