使用Python使用开始和结束日期和时间进行url格式化

时间:2018-07-09 20:10:01

标签: python python-3.x datetime url date-formatting

我正在使用Pandas生成指定范围内的日期和时间列表,以查询API。我的目标是每小时查询几周或几个月。

time_range = pd.date_range('20180601T07:00:0000', '20180701T07:00:0000', freq='H')
time_range = time_range.strftime("%Y%m%d"+'T%H:00-0000')

以所需的列表格式产生时间列表。我遇到困难的地方是URL的格式...

startdatetime=20180601T07:00-0000&enddatetime=20180601T08:00-0000

我知道我需要从Pandas列表中的值0和1开始,但是我不知道如何循环。我是否应该考虑像...这样的字典?

{date1:[hour1, hour2, etc...], date2:[hour1, hour2, etc...], ...}

并使用.format,其中startdatetime = {1}&enddatetime = {2}吗? 还是应该更像是for循环...

for date in date_range:
    url = 'http://somename?startdatetime={date}&enddatetime{date2}'
    urldate = url.format(date=date)
    urldate2 = url.format(date2=date + 1)

感谢您的帮助!

1 个答案:

答案 0 :(得分:1)

如果我理解清楚,您希望以一个小时为单位从开始日期/时间(2018-06-01 07:00)迭代到结束日期/时间(2018-07-01 07:00) 。并生成一个日期/时间间隔为一小时的URL。

我不知道为什么您可以在标准库中使用Panda来做到这一点,就像这样:

import datetime

start = datetime.datetime(2018, 6, 1, 7)
end = datetime.datetime(2018, 7, 1, 7)
delta = datetime.timedelta(hours=1)

fmt = 'http://somename?startdatetime={date1:%Y%m%d%H:00-0000}&enddatetime{date2:%Y%m%d%H:00-0000}'

while start < end:
    date1 = start
    date2 = start + delta
    url = fmt.format(date1=date1, date2=date2)
    print(url)
    start = date2

您得到:

http://somename?startdatetime=2018060107:00-0000&enddatetime2018060108:00-0000
http://somename?startdatetime=2018060108:00-0000&enddatetime2018060109:00-0000
http://somename?startdatetime=2018060109:00-0000&enddatetime2018060110:00-0000
http://somename?startdatetime=2018060110:00-0000&enddatetime2018060111:00-0000
...

在循环中,我使用日期实例。我使用格式字符串,例如“ {date2:%Y%m%d%H:00-0000}”将日期和时间格式化为所需格式。

请注意, date_range()函数易于使用标准库实现:

def date_range(start, end, delta):
    while start < end:
        yield start
        start = start + delta

要获取间隔为一小时的日期列表,您可以执行以下操作:

dates = list(date_range(
    datetime.datetime(2018, 6, 1, 7),
    datetime.datetime(2018, 7, 1, 7),
    datetime.timedelta(hours=1)))

然后,解决方案变为:

fmt = 'http://somename?startdatetime={date1:%Y%m%d%H:00-0000}&enddatetime{date2:%Y%m%d%H:00-0000}'

for date1, date2 in zip(dates[:-1], dates[1:]):
    url = fmt.format(date1=date1, date2=date2)
    print(url)

诀窍是使用 zip()函数,将日期列表移动一个项目以获取几个日期。