目的:日付を思うように操作する
今後スクレイピングで出力したcsvの日付を操作するときに必要だと思ったから。
この記事で得られること
・応用で現在時刻を使用して、作成するcsv名に日付を指定することができる
・csvファイルに記入されているcsvの操作
・date型をstring型にまたその逆もしかり
現在の時刻を出力する
test.py
from datetime import datetime
now = datetime.now()
print(now)
-----result-----
2020-10-26 20:39:01.825495
文字列を日付に変更する方法
test.py
from datetime import datetime
# 2018/11/11 も同様にできる
str_date = '2018年11月11日'
#strptimeは文字列を日付に
#strftimeは日付を文字列に
one_date = datetime.strptime(str_date, '%Y年%m月%d日')
print(one_date)
-----result-----
2018-11-11 00:00:00
過去未来の日付操作
test.py
from datetime import datetime
from datetime import timedelta
str_date = '2018/11/11'
base_date = datetime.strptime(str_date, '%Y/%m/%d')
print(base_date)
-----result-----
2018-11-11 00:00:00
----------------
#10日前
before_10days = base_date - timedelta(days=10)
#10日後
before_10days = base_date - timedelta(days=10)
print(before_10days)
-----result-----
2018-11-01 00:00:00
csvを使用した日付の操作
day.csv
2016-10-01
2016-10-02
2016-10-03
2016-10-04
2016-10-05
2016-10-06
2016-10-07
2016-10-08
2016-10-09
2016-10-10
2016-10-11
2016-10-12
2016-10-13
2016-10-14
day.py
from datetime import datetime
#csv読み込み
with open('day.csv', encoding='utf-8') as f:
for row in f:
day = datetime.strptime(row.rstrip(), '%Y-%m-%d')
print(f'{day:%Y/%m/%d}')
-----result-----
2016/10/02
2016/10/03
2016/10/04
2016/10/05
2016/10/06
2016/10/07
2016/10/08
2016/10/09
2016/10/10
2016/10/11
2016/10/12
2016/10/13
2016/10/14
Python機能
Python3.8の新機能
f'{ 式=}'式そのもの出力ができるようになった。
書式を出力する場合 f'{ 式=:書式}'
csvから該当する日付を出力する
test.py
from datetime import datetime
from datetime import timedelta
main_date ='2016-10-12'
#文字列→日付に
base_day = datetime.strptime(main_date,'%Y-%m-%d')
#一週間前の日付
before_7days = base_day - timedelta(days=7)
#csvファイルを選択
with open('day.csv', encoding='utf-8') as f:
for row in f:
# 文字列→日付 行末の改行を削除
day = datetime.strptime(row.rstrip(), '%Y-%m-%d')
#print(day)
#2016-10-02 00:00:00
#2016-10-03 00:00:00
#~
#2016-10-14 00:00:00
#2016-10-12 から7日間該当するものを表示
if before_7days <= day < base_day:
#Y/m/d 形式で
print(f'{day:%Y/%m/%d}')
-----reult-----
2016/10/05
2016/10/06
2016/10/07
2016/10/08
2016/10/09
2016/10/10
2016/10/11