Chg*_*gad 2 python iteration date
有没有一种简单的方法来迭代给定月份的所有日子?
我想要一种方法,其中我正在迭代的对象具有作为datetime.date对象的日子。我已经找到了calendar模块及其Calendar类和相应的方法itermonthdates(year, month)。
我的问题是生成的迭代器包含“填充”天来表示完整的周。例如,2019 年 7 月在星期三 (31) 结束。所以这一周是不完整的,并itermonthdates()添加了 8 月 1-4 日的日期。
我不想要这种行为。
我的第一个猜测是这样的:
from calendar import Calendar, monthrange
c = Calendar()
for date in list(c.itermonthdates(2019, 7))[:monthrange(2019, 7)[1]]:
print(date)
Run Code Online (Sandbox Code Playgroud)
它的行为符合预期,但我不确定是否有更好、更优雅的方法来做到这一点。
只需date按月过滤对象。
for d in [x for x in c.itermonthdates(2019, 7) if x.month == 7]:
Run Code Online (Sandbox Code Playgroud)
该calendar模块旨在显示日历。如果您正在寻找简单的东西,最好calendar.monthlen与datetime.date它自己结合使用来获取迭代器:
def date_iter(year, month):
for i in range(1, calendar.monthlen(year, month) + 1):
yield date(year, month, i)
for d in date_iter(2019, 12):
print(d)
Run Code Online (Sandbox Code Playgroud)
你当然可以把整个事情写成一行:
for d in (date(2019, 12, i) for i in range(1, calendar.monthlen(2019, 12) + 1)):
print(d)
Run Code Online (Sandbox Code Playgroud)
该monthlen属性似乎是calendarPython 3.7 中的公共但未记录的属性。它类似于 的第二个元素monthrange,因此您可以monthrange(year, month)[1]在上面的代码中将其替换为。
| 归档时间: |
|
| 查看次数: |
5192 次 |
| 最近记录: |