Python 如何从过去的自定义日迭代到今天?
我需要遍历从自定义日期到现在的所有日期。我需要所有正确的一天,而不仅仅是数到几天 例如,我输入10表示月份,输入2018表示年份。我需要得到:Python 如何从过去的自定义日迭代到今天?,python,Python,我需要遍历从自定义日期到现在的所有日期。我需要所有正确的一天,而不仅仅是数到几天 例如,我输入10表示月份,输入2018表示年份。我需要得到: 2018-10-01 2018-10-02 ... 2018-10-31 2018-11-01 2018-11-02 ... 2019-05-21 该示例将用于循环。但是,我尝试使用递归 from datetime import timedelta, date def getdate(date): print (date) if
2018-10-01
2018-10-02
...
2018-10-31
2018-11-01
2018-11-02
...
2019-05-21
该示例将
用于循环
。但是,我尝试使用递归
from datetime import timedelta, date
def getdate(date):
print (date)
if date == date.today(): return
getdate(date+timedelta(1))
start_date = date(2018, 1, 1)
getdate(start_date)
如果您想从pandas获取数据帧,则
date\u range
函数将为您完成所有工作。pd.datetime.now()方法提供当前日期
这里有一个例子:
def get_df_days_to_now(year, month, day = 1):
date_start = "%4d/%d/%d" % (year, month, day)
date_end = pd.datetime.now().strftime("%d/%m/%Y")
return pd.date_range(start=date_start, end=date_end, freq="D")
print(get_df_days_to_now(2019, 5))
# DatetimeIndex(['2019-05-01', '2019-05-02', '2019-05-03', '2019-05-04',
# '2019-05-05', '2019-05-06', '2019-05-07', '2019-05-08',
# '2019-05-09', '2019-05-10', '2019-05-11', '2019-05-12',
# '2019-05-13', '2019-05-14', '2019-05-15', '2019-05-16',
# '2019-05-17', '2019-05-18', '2019-05-19', '2019-05-20',
# '2019-05-21', '2019-05-22'],
# dtype = 'datetime64[ns]', freq = 'D')
从这里开始:递归可能重复的可能重复比迭代更具扩展性+您可能会招致超过最大递归深度的错误。因此,我不同意它一定是更好的代码@ohlr谢谢你的建议。我同意你的观点,这不是更好的代码。但是,我认为递归代码可能是减少副作用和生成简单代码的好风格。
def get_df_days_to_now(year, month, day = 1):
date_start = "%4d/%d/%d" % (year, month, day)
date_end = pd.datetime.now().strftime("%d/%m/%Y")
return pd.date_range(start=date_start, end=date_end, freq="D")
print(get_df_days_to_now(2019, 5))
# DatetimeIndex(['2019-05-01', '2019-05-02', '2019-05-03', '2019-05-04',
# '2019-05-05', '2019-05-06', '2019-05-07', '2019-05-08',
# '2019-05-09', '2019-05-10', '2019-05-11', '2019-05-12',
# '2019-05-13', '2019-05-14', '2019-05-15', '2019-05-16',
# '2019-05-17', '2019-05-18', '2019-05-19', '2019-05-20',
# '2019-05-21', '2019-05-22'],
# dtype = 'datetime64[ns]', freq = 'D')