我有一个包含此表单中的日期和任务的文件
(datetime.datetime(2014, 5, 20, 0, 0), 'laundry')
(datetime.datetime(2014, 6, 1, 0, 0), 'exam ')
如何以这种格式显示特定日期(例如一周内到期)到期的任务?
20/05/2014: laundry
由于
答案 0 :(得分:0)
假设您的数据是这样的元组列表:
date_list = [(datetime.datetime(2014, 5, 20, 0, 0), 'laundry'), (datetime.datetime(2014, 6, 1, 0, 0), 'exam '), (datetime.datetime(2014, 4, 20, 0, 0), 'grocery'), (datetime.datetime(2013, 5, 20, 0, 0), 'tv')]
您可以根据日期获取排序列表:
sorted_dates = sorted(date_list, key=lambda x: str(x[1]), reverse=True)
在这里,您传递日期的字符串表示作为sorted
函数的键,它有效地将排序日期转换为字符串的排序。这给你:
[(datetime.datetime(2013, 5, 20, 0, 0), 'tv'), (datetime.datetime(2014, 5, 20, 0, 0), 'laundry'), (datetime.datetime(2014, 4, 20, 0, 0), 'grocery'), (datetime.datetime(2014, 6, 1, 0, 0), 'exam ')]
您可以使用strftime
方法格式化所需格式的日期:
formatted_dates = [(item[0].strftime("%d/%m/%y"), item[1]) for item in sorted_dates]
给你:
[('20/05/13', 'tv'), ('20/05/14', 'laundry'), ('20/04/14', 'grocery'), ('01/06/14', 'exam ')]
您可以通过将formatted_dates
循环为:
for date, task in formatted_dates:
print '{}: {}'.format(date, task)
打印
20/05/13: tv
20/05/14: laundry
20/04/14: grocery
01/06/14: exam
如果您的数据已经排序,则可以跳到第2步。
要在一周内完成任务,您可以使用timedelta objects和filter
函数的组合
tasks_in_a_week = filter(lambda x: x[0] > datetime.datetime.now() and x[0] < datetime.datetime.now() + datetime.timedelta(days=7), sorted_dates)
说明:datetime.datetime.now()
给出了今天的日期。 datetime.datetime.now() + datetime.timedelta(days=7)
给出了从今天起7天的日期。因此,上面的过滤函数会查找sorted_dates
列表中今天之后以及从今天起7天之后(即一周内)的任何日期。
答案 1 :(得分:0)
鉴于您的任务位于名为mytasks.txt
的文件中,这将列出将来x天内设置的所有任务。
请注意:此代码正在使用eval
,如果您不信任您的输入,则应不使用此代码。
from datetime import timedelta
import datetime
# Change 7 to your prefered number of days
limit = datetime.datetime.now() + timedelta(days=7)
with open('mytasks.txt') as ifile:
for line in ifile:
day, task = eval(line)
# This breaks the loop once a day further ahead arises
if day > limit:
break
print '{}: {}'.format(day.strftime('%d/%m/%Y'), task)
鉴于此输入:
(datetime.datetime(2014, 4, 10, 0, 0), 'chill')
(datetime.datetime(2014, 4, 12, 0, 0), 'out')
(datetime.datetime(2014, 5, 20, 0, 0), 'laundry')
(datetime.datetime(2014, 6, 1, 0, 0), 'exam ')
这将是输出:
10/04/2014: chill
12/04/2014: out
答案 2 :(得分:0)
我强烈建议您使用pandas,这是一个用于数据分析的python库。使用此库,您可以从不同的文件格式读取为csv,并使用TimeSeries类执行所有类型的分析和操作,包括问题中的日期过滤。
例如,如果'ts'是您的时间序列对象,则选择时间范围:
hour = ts.index.hour
selector = ((10 <= hour) & (hour <= 13)) | ((20 <= hour) & (hour <= 23))
data = ts[selector]