Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/python-3.x/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python-迭代月日期并打印自定义输出_Python_Python 3.x - Fatal编程技术网

Python-迭代月日期并打印自定义输出

Python-迭代月日期并打印自定义输出,python,python-3.x,Python,Python 3.x,我目前不确定用于以下问题的逻辑,也不熟悉编程。(目前正在学习python) 尝试迭代给定月份的每个日期-比如05/01--05/31,并以下面的格式打印出来 周一至周五的日期应单独打印。 周六和周日日期应单独打印 如果该月从2020年1月5日星期五开始,则输出应为 因为,这是那周的最后一个工作日 2020年4月的产量如下所示,因为4月的第一周从周三开始 我设法想出了下面的尝试,但不知道如何进一步进行 import sys from datetime import date, datetime

我目前不确定用于以下问题的逻辑,也不熟悉编程。(目前正在学习python)

尝试迭代给定月份的每个日期-比如05/01--05/31,并以下面的格式打印出来

周一至周五的日期应单独打印。 周六和周日日期应单独打印

如果该月从2020年1月5日星期五开始,则输出应为 因为,这是那周的最后一个工作日

2020年4月的产量如下所示,因为4月的第一周从周三开始

我设法想出了下面的尝试,但不知道如何进一步进行

import sys
from datetime import date, datetime, timedelta

year = 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 += delta

for 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

您可以将日期保存在字典中,字典键是日历周的元组和日期类型(周末、一周中的某一天)

每天由保存在
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))

太快了!:)谢谢我对下面的逻辑有点不知所措。strftime(“%V”)\u key=(\u weeknum,\u dayType)如果{u key不在allDays:allDays[\u key]=[]allDays[\u key]。请您解释一下。我正在尝试添加一个附加功能,以检查给定日期范围内的日期是否为国家假日,请打印“NH”和相应的日期。例如:2020-05-04和2020-05-14是国定假日,仅该日期应打印为
NH 5/4/2020 5/4/2020……NH 5/14/2020 5/14/2020
我尝试过:
ph=[]公共假日中的d:ph.append(日期(年、月、整数(d))……所有天中的k、v。items():week_end=''gh=''…..如果v在ph:print(“NH”)中,则其他:first,last=v[0],v[-1]
我是否应该提出一个单独的问题ph数组的输出是
[datetime.date(2020,5,4),datetime.date(2020,5,14)]
是的,提出一个新问题。
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