9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

pythonで時刻文字列をパースする3つの方法【備忘録】

Posted at

やりたい事

テキストで書かれた時刻をpythonのdatetime型にパースする際の方法について備忘録を作っておきたい。

環境

  • Windows10 pro
  • anaconda navigator 1.6.2
  • Jupyter Notebook 5.0.0
  • python 3.6.1
  • Intel Core i7 4770 16GB

#経緯
1.OpenWeatherMapのXML内に登場する日時が見たことない形式(自分だけ)かつ時刻がGMT(UTC)だった。
2.9時間足してあげる処理をしないと時差で日付が違う状態になってしまう事態に対応するのが大変。
3.あらかじめ用意されている型に入れて時差を追加で計算してあげるのが一番と考えた。

ちなみにXMLの中で登場する日付はこんな感じ。

2017-07-08T19:33:11

パースの方法を調べたらたくさんあったのでコードをまとめておく。

import time
from datetime import datetime
from dateutil.parser import parse

start = time.time()
date="2017-07-08T19:33:11" #パース対象の文字列
for i in range(100000): #parse()で10万回パースするループ
    dt1 = parse(date)
elapsed_time_for_parse = time.time() - start #parse()でパースした場合の経過時間を格納

start = time.time()
for i in range(100000): #strptime()で10万回パースするループ
    dt2 = datetime.strptime(date, '%Y-%m-%dT%H:%M:%S')
elapsed_time_for_strptime = time.time() - start #strptime()でパースした場合の経過時間を格納

start = time.time()   
for i in range(100000): #文字列切出で10万回パースするループ
    dt3 = datetime(
        year=int(date[0:4]),month=int(date[5:7]),day=int(date[8:10]),
        hour=int(date[11:13]),minute=int(date[14:16]),second=int(date[17:20])
    )
elapsed_time_for_cutparse = time.time() - start #文字列切出でパースした場合の経過時間を格納

print('parse()       takes {:.4f}sec, dt1:{}'.format(elapsed_time_for_parse,dt1))
print('strptime()    takes {:.4f}sec, dt2:{}'.format(elapsed_time_for_strptime,dt2))
print('cut and parse takes {:.4f}sec, dt3:{}'.format(elapsed_time_for_cutparse,dt3))

#結果

方法 所要時間
parse() 5.8433
strptime() 1.0622
文字列切出 0.2875
※所要時間は筆者の上記環境で10万回ループを実行した時間

#まとめ
parse()が一発で楽だけど遅い
文字列切出が手間多いが速い。

#参考にさせていただいたサイト

OpenWeatherMap
コード7区 日時の文字列を python でパース。年月や時分を取りだす
miyalog Python の datetime.strptime がすんごく遅い件

#jupyter notebookの結果画面

image.png

9
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
9
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?