url 使用 Python 格式化开始和结束日期和时间
url formatting with beginning & ending date & time using Python
我正在使用 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 where 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)
感谢任何帮助!
如果我理解清楚的话,你想从开始 date/time (2018-06-01 07:00) 迭代到结束 date/time (2018-07-01 07:00),步长为一小时。并以 date/time 一小时的间隔生成 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() 函数将日期列表移动一项以获得一对日期。
我正在使用 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 where 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)
感谢任何帮助!
如果我理解清楚的话,你想从开始 date/time (2018-06-01 07:00) 迭代到结束 date/time (2018-07-01 07:00),步长为一小时。并以 date/time 一小时的间隔生成 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() 函数将日期列表移动一项以获得一对日期。