turtlechanのブログ

無知の私がLinuxをいじりながら書いていくブログ

【Python】土日の日付をリストで出力

株式市場の休業日をリストで取得する過程で、まず土曜・日曜を抜き出したくなった。調べたら関数に引数を渡して判定するものがあったが、しっくり来なかったので書いた。

※python2で書いてます。

土日の日付リスト

satsun.py
#! /usr/bin/env python
# coding: utf-8

import datetime


def holiday_list(targetYear='2015'):
    '''指定年度の土日の日付を返す'''
    baseDate = datetime.date(int(targetYear), 1, 1)
    days = (baseDate - datetime.date(int(targetYear) - 1, 1, 1)).days
    return [str(baseDate + datetime.timedelta(i)) for i in range(0, days) if (baseDate + datetime.timedelta(i)).weekday() >= 5]


def holiday_dict(targetYear='2015'):
    '''指定年度の土日の日付を返す'''
    holidayList = holiday_list(targetYear)
    return {d: 'Sat' if datetime.datetime.strptime(d, '%Y-%m-%d').date().weekday() == 5 else 'Sun' for d in holidayList}
    # pep8で怒られるので却下
    # func = lambda d: datetime.datetime.strptime(d, '%Y-%m-%d').date().weekday()
    # return {d: 'Sat' if fucn(d) == 5 else 'Sun' for d in holidayList}


def main():
    pass


if __name__ == '__main__':
    main()

datetime ライブラリの weekday() メソッドを使って土日の判定をしてる。holiday_list 関数に西暦を渡すとその年度の土日の日付のリストを返す。365回ループを回してるから効率はあまり良くなさそう。

試しに main 関数の pass の部分を以下に変えて実行すると

print(holiday_list(2019))
実行結果
['2019-01-05', '2019-01-06', '2019-01-12', '2019-01-13', '2019-01-19', '2019-01-20', '2019-01-26', '2019-01-27', '2019-02-02', '2019-02-03', '2019-02-09', '2019-02-10', '2019-02-16', '2019-02-17', '2019-02-23', '2019-02-24', '2019-03-02', '2019-03-03', '2019-03-09', '2019-03-10', '2019-03-16', '2019-03-17', '2019-03-23', '2019-03-24', '2019-03-30', '2019-03-31', '2019-04-06', '2019-04-07', '2019-04-13', '2019-04-14', '2019-04-20', '2019-04-21', '2019-04-27', '2019-04-28', '2019-05-04', '2019-05-05', '2019-05-11', '2019-05-12', '2019-05-18', '2019-05-19', '2019-05-25', '2019-05-26', '2019-06-01', '2019-06-02', '2019-06-08', '2019-06-09', '2019-06-15', '2019-06-16', '2019-06-22', '2019-06-23', '2019-06-29', '2019-06-30', '2019-07-06', '2019-07-07', '2019-07-13', '2019-07-14', '2019-07-20', '2019-07-21', '2019-07-27', '2019-07-28', '2019-08-03', '2019-08-04', '2019-08-10', '2019-08-11', '2019-08-17', '2019-08-18', '2019-08-24', '2019-08-25', '2019-08-31', '2019-09-01', '2019-09-07', '2019-09-08', '2019-09-14', '2019-09-15', '2019-09-21', '2019-09-22', '2019-09-28', '2019-09-29', '2019-10-05', '2019-10-06', '2019-10-12', '2019-10-13', '2019-10-19', '2019-10-20', '2019-10-26', '2019-10-27', '2019-11-02', '2019-11-03', '2019-11-09', '2019-11-10', '2019-11-16', '2019-11-17', '2019-11-23', '2019-11-24', '2019-11-30', '2019-12-01', '2019-12-07', '2019-12-08', '2019-12-14', '2019-12-15', '2019-12-21', '2019-12-22', '2019-12-28', '2019-12-29']

こんな感じに出力される。問題なさそうですね。

おわりに

これだと土日の休業日だけなので、祝日も追加しないと。。。祝日による休業日は「JPX日本取引所グループ」から持ってくれば良さそう。