亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

Python - 遍歷月份日期并打印自定義輸出

Python - 遍歷月份日期并打印自定義輸出

明月笑刀無情 2022-12-20 16:43:36
我目前不確定用于以下問題的邏輯以及編程的新手。(目前正在學習 python)嘗試遍歷給定月份的每個日期 - 比如 05/01 - 05/31 并以下面的格式打印出來。周一到周五的日期要單獨打印。星期六和星期日的日期要單獨打印。如果這個月從星期五開始 - 05/01/2020,輸出應該是 那個星期的最后一個工作日。對于 2020 年 4 月,產量將如下所示,因為 4 月的第一周從周三開始。我設法想出以下嘗試,但不確定如何進一步進行。import sysfrom datetime import date, datetime, timedeltayear = int(sys.argv[1])month = int(sys.argv[2])st_dt = int(sys.argv[3])en_dt = int(sys.argv[4])first_date = datetime(year, month, st_dt).date()get_first_day = datetime(year, month, st_dt).isoweekday()def daterange(startDate, endDate, delta=timedelta(days=1)):    currentDate = startDate    while currentDate <= endDate:        yield currentDate        currentDate += deltafor date in daterange(date(year, month, st_dt), date(year, month, en_dt), delta=timedelta(days=1)):     print(date)  date.py 2020 5 1 31 # script提出了一個獨立的“if 循環”,正如我之前所說,不確定如何構建更大的圖景:(if get_first_day == 1:        #print("Monday")        sec_d =  first_date + timedelta(days=4)elif get_first_day == 2:        sec_d = first_date + timedelta(days=3)elif get_first_day == 3:        sec_d = first_date + timedelta(days=2)elif get_first_day == 4:        sec_d = first_date + timedelta(days=2)elif get_first_day == 5:        sec_d = first_date        #print("Friday")else:        passprint(f"Second date:{sec_d} ") -- which gave  -- > Second date:2020-05-01
查看完整描述

1 回答

?
慕妹3146593

TA貢獻1820條經驗 獲得超9個贊

您可以將日期保存在字典中,字典鍵是日歷周和日期類型(周末、星期幾)的元組。


每一天都保存在allDays字典中,按周數和日期類型的組合作為鍵進行分組:


 ('18', 'weekend'): [datetime.date(2020, 5, 2), datetime.date(2020, 5, 3)],

 ('18', 'working'): [datetime.date(2020, 5, 1)],

 ('19', 'weekend'): [datetime.date(2020, 5, 9), datetime.date(2020, 5, 10)],

 ('19', 'working'): [datetime.date(2020, 5, 4), ...

所以你只需要取出每個 dict 項目的第一個和最后一個項目:


import sys

from datetime import date, datetime, timedelta


year, month, st_dt, en_dt = 2020, 5, 1, 31


first_date = datetime(year, month, st_dt).date()

get_first_day = datetime(year, month, st_dt).isoweekday()


def daterange(startDate, endDate, delta=timedelta(days=1)):

    currentDate = startDate

    while currentDate <= endDate:

        yield currentDate

        currentDate += delta


allDays = {}

_lastDayType = None

for dte in daterange(date(year, month, st_dt), date(year, month, en_dt), delta=timedelta(days=1)):

    if 0 <= dte.weekday() < 5:

        _dayType = 'working'

    else:

        _dayType = 'weekend'


    _weeknum = dte.strftime("%V")  # number of calendar week

    _key = (_weeknum, _dayType)

    if _key not in allDays:        # create an empty list if unique key doesnt exist

        allDays[_key] = []

    allDays[_key].append(dte)      # add the dates ...


for k,v in allDays.items():

    if len(v) == 1:

        first, last = v[0], v[0]

    else:

        first, last = v[0], v[-1]

    print("%s >> %s" % (first, last))

輸出:


2020-05-01 >> 2020-05-01

2020-05-02 >> 2020-05-03

2020-05-04 >> 2020-05-08

2020-05-09 >> 2020-05-10

2020-05-11 >> 2020-05-15

2020-05-16 >> 2020-05-17

2020-05-18 >> 2020-05-22

2020-05-23 >> 2020-05-24

2020-05-25 >> 2020-05-29

2020-05-30 >> 2020-05-31


查看完整回答
反對 回復 2022-12-20
  • 1 回答
  • 0 關注
  • 188 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號