我正在用Python构建天气预报Web抓取工具。我在约会方面有一点问题。我在[29,30,31,1,2,3]
这样的列表中有几天可以进行预测。我需要将其格式化为日期格式,例如 2019-08-29 ,但是如果当前月的最后一天,我不知道如何增加月份。
我已尝试将当月加入我的日子,但是如果加入,我将拥有该月的所有日期,例如:
[2019-08-29, 2019-08-30, 2019-08-31,2019-08-01,2019-08-02,2019-08-03]
代替[2019-08-29, 2019-08-30, 2019-08-31,2019-09-01,2019-09-02,2019-09-03]
。
因此,如果某天是当前月份的最后一天,然后增加月份,我需要您的帮助进行循环检查。
import pandas as pd
import datetime as dt
from calendar import monthrange
days = [29,30,31,1,2,3,4]
cy = int(dt.datetime.today().year)
cm = int(dt.datetime.today().month)
last_day = monthrange(cy,cm)[1]
for i,day in enumerate(days):
while (days[i] - days[i+1]) == -1:
i+=1
print(cm)
if (days[i] - days[i+1]) != -1:
print(cm)
cm += 1
print(cm)
答案 0 :(得分:0)
因此,如果您要尝试做的是使用for循环来增加月份,那么这应该可行:
days = [29, 30, 31, 1, 2, 3, 4]
cy = int(dt.datetime.today().year)
cm = int(dt.datetime.today().month)
last_day = monthrange(cy,cm)[1]
for i, day in enumerate(days):
last_day = monthrange(cy, cm)[1]
print(f"{cy}-{cm}-{day}")
if cm == 12 and day == last_day:
cy += 1
cm = 1
elif day == last_day:
cm += 1
输出:
2019-8-29
2019-8-30
2019-8-31
2019-9-1
2019-9-2
2019-9-3
2019-9-4
尽管此方法容易出错,所以您需要添加错误处理。例如,如果当前月份为11月,而您在几天后得到31
,则下一次迭代(2019-11-30, 2019-12-31, 2020-1-1
)的日期将不正确。仅在days
正确且没有任何错误的情况下才能使用。
像其他人建议的那样,事先进行一些预处理可能会比较安全,然后再计算整个日期范围。
答案 1 :(得分:0)
使用内置的datetime模块
from datetime import date, timedelta
day0 = date.today()
for td in range(7):
myday = day0 + timedelta(days=td)
print(myday.strftime('%Y-%m-%d'))
输出
2019-08-30
2019-08-31
2019-09-01
2019-09-02
2019-09-03
2019-09-04
2019-09-05
使用第三方pendulum的两种选择,但是您也可以使用任何其他流行的第三方程序包
import pendulum
d0 = pendulum.now()
dates = [d0.add(days=d).strftime('%Y-%m-%d') for d in range(7)]
print(dates)
start = pendulum.now()
end = start.add(days=6)
for d in pendulum.period(start, end):
print(d.strftime('%Y-%m-%d'))
输出
['2019-08-30', '2019-08-31', '2019-09-01', '2019-09-02', '2019-09-03', '2019-09-04', '2019-09-05']
2019-08-30
2019-08-31
2019-09-01
2019-09-02
2019-09-03
2019-09-04
2019-09-05