如何在Python中获取特定日期范围的数据?

时间:2018-10-04 03:29:51

标签: python python-3.x

我已经从互联网创建了一个数据集:

我正在基于本地文件(JSON输出)使用以下代码:

Validdata = []
for new in Sampledata:
    print(str(new['title']) + " | " + str(new['published'][:10]))
    Validdata.append(new) 

我的输出:

Amnesia: Collection Hits Xbox One Next Week | 2018-08-27
(USA) Building Safety Technician | 2018-08-27
SONY VAIO VPCCA15FG DRIVERS DOWNLOAD | 2018-08-26
Google Alert - windows 10 | 2018-08-27

如果我们看到这样的数据,每个标题的末尾都有日期,那么我只想打印出某些日期范围内的文章:

我尝试使用它进行比较,但是却收到此错误消息:

Startdate = '2018-09-01'
Enddate = '2018-10-01'
underDaterange = []
for value in Sampledata['title']  and Sampledata['published'][:10] in range [Startdate:Enddate]:
       underDaterange.append(value)

错误消息:

 TypeError: list indices must be integers or slices, not str

2 个答案:

答案 0 :(得分:4)

看看内置的datetime.strptime

from datetime import datetime

dates = ('2018-01-01', '2018-08-27', '2018-09-01', '2018-10-01')
format = '%Y-%m-%d'
start_dt = datetime.strptime('2018-08-01', format)
end_dt = datetime.strptime('2018-09-30', format)

[date for date in dates if datetime.strptime(date, format) > start_dt and datetime.strptime(date, format) < end_dt]
# ['2018-08-27', '2018-09-01']

另外,请检查您的变量命名约定和缩进的使用。

答案 1 :(得分:0)

您的错误消息指出use正在使用字符串作为范围函数中的索引。

创建日期对象:

from datetime import date

start_date = date(2017, 1, 1)
end_date = date(2018, 10, 4)

在范围函数中将日期用作整数:

range(int((end_date - start_date).days))