NissyBlog

Life goes on.

Pythonライブラリ厳選レシピを読み、Pythonのコードを書いてみた

とあるきっかけがあり、「Pythonライブラリ厳選レシピ」という本に触れる機会を頂きました。

www.amazon.co.jp

本日は、こちらの本を読んだ感想と実際に本を読みながらコードを書いた感想について書きたいと思います。

読んでみた

まず、「本書の使い方」という項目で、紙面の構成•サンプルコード•動作環境についての解説を一読した後、
目次に目を通します。目次から感じる印象として、以下の三つの印象を感じました。

  • Pythonで「書きたいもの」にフォーカスした構成になっていること
  • 個々の章は独立しており、書きたい機能が掲載されている章をつまみ食い感覚で読めること
  • 体系立ててPythonについて解説している本ではない

という印象を持ちました。

本来ならここで各章ごとに感想等を述べていく流れに繋げるべきかもしれません。
しかし、Pythonの文法や言語仕様について一通り目を通しただけという
対象ユーザーど真ん中なスキルセットの私がこの本を参考にしながらコードを書くと
どうかるのかを以下に書いていこうと思います。

書いてみた

では、実際に書いてみようと思います。
今回は現在時刻をUTCに変換する処理を書いて見ることにします。

まずは、JSTUTCに変換する処理を書いてみます。
目次から3.4章に「世界中のタイムゾーン情報を扱う」という章を見つけたので、
p.53を参考にしながら書いてみます。

>>> import pytz
>>> from datetime import datetime
>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'
>>> tokyo = pytz.timezone('Asia/Tokyo')
>>> utc = pytz.timezone('UTC')
>>> tokyo_dt = tokyo.localize(datetime(2015, 10, 25, 1, 18))
>>> tokyo_dt.strftime(fmt)
'2015-10-25 01:18:00 JST+0900'
>>> utc_dt = tokyo_dt.astimezone(utc)
>>> utc_dt.strftime(fmt)
'2015-10-24 16:18:00 UTC+0000'

ほぼ写経しただけですが、JSTUTCに変換する処理が書けました。

続いて、現在時刻を取得する処理を書いてみます。
先ほどと同様に、3.1章の「日付と時刻の処理」という章から、
p.40を参考に書いてみます。

>>> from datetime import datetime
>>> today = datetime.today()
>>> today
datetime.datetime(2015, 10, 25, 1, 52, 24, 468620)

こちらは写経しただけですが、現在時刻を取得する処理が書けました。

最後に、この二つを組み合わせて、
現在時刻をUTCに変換する処理を書いて見ます。

>>> import pytz
>>> from datetime import datetime
>>> today = datetime.today()
>>> utc = pytz.timezone('UTC')
>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'
>>> utc_dt = today.astimezone(utc)
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
ValueError: astimezone() cannot be applied to a naive datetime

おっと、astimezoneメソッドではnaiveなdatetimeオブジェクトを変換出来ないようです。
localizeメソッドを使って、naiveからawareへの変換を行うことにします。

>>> import pytz
>>> from datetime import datetime
>>> today = datetime.today()
>>> utc = pytz.timezone('UTC')
>>> fmt = '%Y-%m-%d %H:%M:%S %Z%z'
>>> utc_date = pytz.utc.localize(today)
>>> utc_date.strftime(fmt)
'2015-10-25 02:06:56 UTC+0000'

上記のように実装することで、
現在時刻をUTCに変換する処理が書けました。

書いてみた上での感想

今回、「Pythonライブラリ厳選レシピ」を読みながら
実際に書いてみた感想と致しましては、

Pythonで書きたいものがある時に、

  • どんなモジュールをインポートしたらいいか
  • インポートしたモジュールにはどんなメソッドが存在するか

といった内容がぱっと出てこなかった時のハードルを下げてくれるのに役立ちました。

しかし、今回記述した処理のように、
「掲載されている内容をただくっつけただけでは上手動かない」
といったハマりポイントを乗り越える内容についてはあまり言及されていないです。
そのため、プログラミング初学者というよりは、
言語問わず、ある程度コードを書いたことがある人が
Pythonのコードを書く時に手にすると良いのではないかと感じました。

最後に

とあるきっかけを与えてくれた飲み友達のamacbee (@a_macbee) | Twitterに心から感謝致します。
本当にありがとうございました。

※参考
Pythonの日付処理とTimeZone | Nekoya Press