【曜日取得 実装例】演習で身に付けるpythonプログラミング【vol. 4】

【再掲】リクエスト:祝日に対応する曜日の取得

日本の祝日一覧が記載されているCSVファイルに対して、曜日の情報を追加した新しいCSVファイルを作成するプログラムを作成してください。

実装例

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
# 曜日取得実装例
 
NH_DATE = "国民の祝日・休日月日"
NH_NAME = "国民の祝日・休日名称"
NH_DAY = "曜日"
 
import csv
from pathlib import Path
 
def get_day(date):
    """
    日付を入力し、その日の曜日を返す
    Args:
        date (str): yyyy/m/d型の文字列
    Return:
        (str): 月〜日までの曜日
    """
    days = ['月','火','水','木','金','土','日']
    year, mm, dd = [int(v) for v in date.split('/')]
 
    # ツェラーの公式: https://ja.wikipedia.org/wiki/ツェラーの公式
    if mm == 1:
        year -= 1
        mm = 13
     
    if mm == 2:
        year -= 1
        mm = 14
 
    capital_y = year % 100
    capital_c = year // 100
    gamma = 5*capital_c + (capital_c//4)
    h = (dd + (26*(mm+1) // 10) + capital_y + (capital_y//4) + gamma + 5) % 7
 
    return days[h]
 
 
if __name__ == '__main__':
    i_dir = Path('/Users/user_name/Documents/')# TODO CSVを保存したディレクトリを指定
    i_fname = 'syukujitsu.csv'
    o_fname = 'syukujitsu_day.csv'
 
    # CSVファイルの読み込み
    with open(i_dir / i_fname, encoding='s-jis') as f:
        reader = csv.DictReader(f)
        i_csv = [row for row in reader]
 
    # 曜日の取得
    syukujitsu_day = []
    for line in i_csv:
        day = get_day(line[NH_DATE])
        line[NH_DAY] = day
        syukujitsu_day.append(line)
             
    # CSVファイルの書き込み
    with open(i_dir / o_fname, encoding='utf-8', mode='w') as f:
        writer = csv.DictWriter(f, [NH_DATE, NH_DAY, NH_NAME])
        writer.writeheader()
        writer.writerows(syukujitsu_day)

今回のポイント

余談

リクエストを考えていたときは、曜日を取得するアルゴリズムの実装が大変かと思ってましたが、便利な公式のおかげですんなりできました。先人に感謝です。

コメント

PAGE TOP
タイトルとURLをコピーしました