1
2

More than 3 years have passed since last update.

【python】「"」や「'」を使ったタイム表示(str型)をdatetimeとtimedeltaで秒(float型)に変換する

Last updated at Posted at 2020-05-02

概要

とあるものをスクレイピングしてて,経過タイム的なのの処理に困ったのでメモ.

こういうストップウォッチの表記知ってますか?
「x'yy"z」 は「x分yy.z秒」ということになります.この文字列(str型)からpythonを使って秒(float型)に変換したいというのが今回やりたいことです.
例えば
「1'45"5」 -> 105.5秒という変換です.

1. Datetimeのstrptimeを使って文字列をdatetime型に変換

プログラム中では,pythonの文字列型は'hoge'または"hoge" で記述されますが,今回のタイム表記「x'yy"z」は文字列中に「'」,「"」が含まれてしまいます.こういった場合は,pythonの文字列では\を使って対応し,'x\'yy"z'という表記になります.
これをstrptimeを使ってdatetime型にすると次のようになります.

from datetime import datetime
# %Mは分,%Sは秒,%fはマイクロ秒
strtime = '1\'45"5' # 文字列
t = datetime.strptime(strtime, '%M\'%S"%f')
print('t:', t)
print('type:', type(t)) 

# Output
# t: 1900-01-01 00:01:45.500000
# type: <class 'datetime.datetime'>

これだけだと,datetimeは日付型なので,1900年1月1日0時1分45秒500000マイクロ秒ということになってしまいます.
今回は日付ではなく,「タイム」として扱いたいので,これだけでは不十分です.
そこで,timedelta型へ変換します.

2. timedelta型へ変換,更に秒への変換

timedeltaは日付や時間の足し引きに使われたりするように,「日付」ではなく「時間」を表します.しかし文字列から直接の変換ができないためdatetime型を返しました.
datetime型からtimedelta型への変換は次のとおりです.

from datetime import timedelta
t_delta = timedelta(
    seconds=t.second,  # datetime型tの秒が格納されている
    microseconds=t.microsecond,  # datetime型tのマイクロ秒が格納されている
    minutes=t.minute,  # datetime型tの分が格納されている
)
print('t_delta:', t_delta)
print('type:', type(t_delta))
# Output
# t_delta: 0:01:45.500000
# type: <class 'datetime.timedelta'>

timedelta型では日付ではなくなり,時間としての1分45秒5として扱われていることがわかります.
最後に1分45秒5を秒のみに変換します.
もちろん,手動でプログラミング書いてもいいですが,timedeltaではtotal_seconds()というメソッドがあり,一発で秒への変換が可能です!

tdl2sec = t_delta.total_seconds()
print(tdl2sec)
print(type(tdl2sec))

#Output
# 105.5
# <class 'float'>

めでたく目標達成!!

1
2
3

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
1
2