calendar.itermonthdates会在意外范围内迭代

时间:2018-12-19 10:06:48

标签: python-3.x

我尝试使用python的calendar.itermonthdates()为数据仓库生成时间维度。

我对自己的小可爱脚本感到满意,直到发现该迭代器的工作原理多么古怪。主要是说2018-12-312019-01-06之间的一周是2018年12月的第1周

以下是我的参考代码:

    for year in range(2018, 2022):
        for month in range(1, 13):
            startdate = 0
            enddate = 0
            week_num = 0
            for date in cal.itermonthdates(year, month):
                if date.isoweekday() == 1:
                    startdate = date
                    week_num = date.isocalendar()[1]
                    ts = Timestamp(date)
                if date.isoweekday() == 7:
                    enddate = date
                if date.isoweekday() != 7:
                    enddate = date
                #some more code

此外,我希望在2018-12-312019-01-06期间获得2018年12月40日左右和2019年1月1日第一周。

但是我实际上得到了两条记录:

|----------|----------|------|---------|--------|
|start_date|end_date  |wk_num|month_num|year_num|
|----------|----------|------|---------|--------|
|2018-12-31|2019-01-06|1     |12       |2018    |
|2018-12-31|2019-01-06|1     |1        |2019    |

我想问题出在datetime模块的isocalendar()(返回[yr_num, wk_num, wk_day])中,因为:

for date in cal.itermonthdates(2018, 12):    
    print(date, date.isocalendar(), date.isoweekday())
[...]
2018-12-31 (2019, 1, 1) 1
[...]

我自然可以稍后再更新那些记录,但是那是我无法正确编写脚本的痛苦。有提示吗?

0 个答案:

没有答案