概要
ひょんなことで見つけたライブラリ。日付文字列をdatetimeに変換してくれるライブラリなのですが、最速みたいです。
githubページは以下。
ciso8601という名前の通り、C言語で実装されています。
iso8601のフォーマットに対応しているので、その形式の文字列であればパース可能ということです。
とりあえず、一旦遊んでみました。
インストール
インストールは、condaでやりました。
(trypython) λ conda install ciso8601 -y Solving environment: done ## Package Plan ## environment location: C:\Users\xxxx\Miniconda3\envs\trypython added / updated specs: - ciso8601 The following NEW packages will be INSTALLED: ciso8601: 1.0.8-py36_0 conda-forge The following packages will be UPDATED: ca-certificates: 2018.1.18-0 conda-forge --> 2018.4.16-0 conda-forge certifi: 2018.1.18-py36_0 conda-forge --> 2018.4.16-py36_0 conda-forge Preparing transaction: done Verifying transaction: done Executing transaction: done
とりあえず動かしてみる
以下のようなサンプルつくってちょっと動かしてみました。
python 最速日付解析ライブラリ ciso8601 のサンプル
結果
確かにめっちゃ速い。
通常の datetime.strptime の場合
$ python ./ciso8601_example.py --mode datetime [datetime] count: 100000 elapsed: 1.225secs
ciso8601
$ python ./ciso8601_example.py [ciso8601] count: 100000 elapsed: 0.022secs
備考
作者さんのgithubページのREADMEをよく見ると以下の記載を発見。
If time zone information is provided, an aware datetime object will be returned. Otherwise, the datetime is unaware. Please note that it takes more time to parse aware datetimes, especially if they're not in UTC. If you don't care about time zone information, use the parse_datetime_unaware method, which will discard any time zone information and is faster. Parsing aware date times requires the pytz module, otherwise time zone information is ignored and unaware datetimes are returned.
awareな日付の場合は、parse_datetimeを、naiveな日付の場合は、parse_datetime_unaware 使ったほうが速いよって書いてありますね。
上のサンプルはnaiveなので、parse_datetime_unaware を使ったほうが良かったかも。。
過去の記事については、以下のページからご参照下さい。
- いろいろ備忘録日記まとめ
サンプルコードは、以下の場所で公開しています。
- いろいろ備忘録日記サンプルソース置き場