Why it doesn't work?

作業のメモ、記録をブログに残しています。

Python datetime.strptimeで"unconverted data remains:"が発生

スクレイピングをしていると様々な日付のフォーマットが見受けられます。基本的には、以下のように取得した日付の文字列をdatetimeオブジェクトに変換してから、比較したり、足したり引いたりしています。

import datetime

t = 'Mon, 02 Dec 2019 00:00:00 +0900'
d = datetime.datetime.strptime(t, '%a, %d %b %Y %H:%M:%S %z')
print(d)

これを実行すると以下のようになります。

2019-12-02 00:00:00+09:00

そんな作業を続けていると次のようなエラーが発生しました。

ValueError: time data 'Jan, 01 Dec 2019 08:30:00 +0900' does not match format '%a, %d %b %Y %H:%M:%S %z'

ValueErrorはstrptimeで指定したフォーマットと日付の文字列が一致しないと発生するエラーです。
曜日が%a、日付が%d…取得した日付の文字列と仕様を三十分ほどにらめっこしてやっと気づきました。
月が二つ(JanとDec)ある。。。

対策としては、以下のように問題の文字列を削除してしまうことですが。。。

対策1
import datetime

t = 'Jan, 01 Dec 2019 08:30:00 +0900'
d = datetime.datetime.strptime(t.replace("Jan, ",""), '%d %b %Y %H:%M:%S %z')
print(d)
対策2
import datetime

t = 'Jan, 01 Dec 2019 08:30:00 +0900'
d = datetime.datetime.strptime(t[5:], '%d %b %Y %H:%M:%S %z')
print(d)

どちらも

2019-12-01 08:30:00+09:00

となりますが、今後も"Jan"以外が曜日に指定されることを考えて対策2ですすめています。
今日はここまで。

余談ですが、AmazonサイバーマンデーセールでiPadが安かったので思わず購入してしまいました。
うーん、Fireタブレットはお払い箱かな。