从iCal数据生成时间表。

timetable的Python项目详细描述


iCal是一种相对紧凑的文本格式,虽然不直观,也不方便使用。 用于日历和日程安排信息。可以定义重复事件 通过大量的规则,使得格式紧凑但不方便 用于自动处理。这个包的目的是提供功能 通过转换iCalendar简化iCalendar文件的自动处理 把信息编成时间表。

安装

时间表需要python 2或3。您可以通过pip

轻松安装时间表
$ pip install timetable

文档和代码

您可以在中找到a short guidesome examples,以及API referenceonline documentation。源代码在Bitbucket上可用。

如果您发现任何错误,请将它们张贴在issue tracker

开始

时间表是包含开始和结束日期时间的元组的排序序列。 例如(start, end, entry)项。startenddatetime偏移原始对象(例如,不包含时区 信息)在UTC时间。entry是一个字典,包含任意 价值观。

以下示例是有效的时间表列表:

[(datetime(2015,1,1,12),datetime(2015,1,1,13),{}),(datetime(2015,1,2,12),datetime(2015,1,2,13),{}),(datetime(2015,1,3,12),datetime(2015,1,3,13),{}),]

可以从iCal文件生成时间表。下面的示例显示 时间表是根据日历中的所有事件条目生成的。例子 打印每个条目的开始datetime以及日历事件 摘要:

>>>fromtimetableimportparse_ical,generate_timetable>>>>>>icaldata=b"""
... BEGIN:VCALENDAR
... BEGIN:VEVENT
... UID:0
... DTSTART:20150101T120000Z
... DTEND:20150101T130000Z
... RRULE:FREQ=DAILY;COUNT=3;BYDAY=TH,FR
... SUMMARY:event a
... END:VEVENT
... BEGIN:VEVENT
... UID:1
... DTSTART:20150101T123000Z
... DTEND:20150101T133000Z
... RRULE:FREQ=DAILY;COUNT=3
... SUMMARY:event b
... END:VEVENT
... END:VCALENDAR
... """>>>calendar=parse_ical(icaldata)[0]>>>forstart,end,entryingenerate_timetable(calendar,b'vevent'):...summary=str(entry['item'][b'summary'][0].value.decode('utf-8'))...print('%s%s'%(start.isoformat(),summary))2015-01-01T12:00:00eventa2015-01-01T12:30:00eventb2015-01-02T12:00:00eventa2015-01-02T12:30:00eventb2015-01-03T12:30:00eventb2015-01-08T12:00:00eventa

垃圾还是鸡蛋?

时间表数据可用于计算时间管理的指标,如 例如,计算在会议或项目上花费的时间。

然而,更紧迫的问题是如果你花更多的时间吃饭 两个月后午餐吃鸡蛋或土豆条,假设你吃土豆条45分钟,但是 每周一和周二只吃一周,而你只吃15分钟的鸡蛋 每周,但仅从星期三到星期五:

>>>fromdatetimeimportdatetime,timedelta>>>fromtimetableimportparse_ical,generate_timetable,clip_timetable>>>>>>icaldata=b"""
... BEGIN:VCALENDAR
... BEGIN:VEVENT
... UID:0
... DTSTART:20150101T120000Z
... DTEND:20150101T124500Z
... RRULE:FREQ=WEEKLY;BYDAY=MO,TU;INTERVAL=2
... SUMMARY:spam
... END:VEVENT
... BEGIN:VEVENT
... UID:1
... DTSTART:20150101T120000Z
... DTEND:20150101T121500Z
... RRULE:FREQ=WEEKLY;BYDAY=WE,TH,FR
... SUMMARY:eggs
... END:VEVENT
... END:VCALENDAR
... """>>>calendar=parse_ical(icaldata)[0]>>>>>>start=datetime(2015,1,1)>>>end=datetime(2015,3,1)>>>timetable=clip_timetable(generate_timetable(calendar),start,end)>>>>>>time={b'spam':0,b'eggs':0}>>>forstart,end,entryintimetable:...food_name=entry['item'][b'summary'][0].value...time[food_name]+=(end-start).total_seconds()/3600>>>>>>print('spam: %.2f, eggs: %.2f'%(time[b'spam'],time[b'eggs']))spam:6.75,eggs:6.50

看起来像垃圾邮件。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java为什么JPA规范(包括2.0)或Hibernate扩展不允许您为@Version注释指定生成器,例如Oracle序列   Univocity解析器中特定DecimalFormat的java格式结果集   javanetbeansjavadoc   java Maven概要文件不在子模块中继承   java HTTP 500错误:如何修复我的`dispatcherservlet。xml文件?   java Lucene 2.4.1索引将使用Lucene 6.2.1重新编制索引   java如何使用ManagedServiceFactory服务   java在一行上读取多个字符输入   java轮流挑选端点,试图获得最大值   通过Java/Spring引导连接到Docker Elasticsearch实例   java返回最大元素   java clear recyclerview打开另一个活动的按钮   java何时在JPA中使用一对多或多对一   使用Jersey客户端的JavaHTTPS