【问题标题】:Parsing iCal feed with Python using icalendar使用 icalendar 使用 Python 解析 iCal 提要
【发布时间】:2021-10-08 04:34:17
【问题描述】:

我正在尝试使用 python 中的 icalendar 库解析包含多个事件的提要。

'summary' , 'description' 等工作正常,但对于 'dtstart' 和 'dtend' 它返回我: icalendar.prop.vDDDTypes object at 0x101be62d0

def calTest():
    req = urllib2.Request('https://www.google.com/calendar/ical/XXXXXXXXXX/basic.ics')
    response = urllib2.urlopen(req)
    data = response.read()

    cal = Calendar.from_ical(data)

    for event in cal.walk('vevent'):

        date = event.get('dtstart')
        summery = event.get('summary')

        print str(date)
        print str(summery)

    return

我做错了什么? 要使用 vobject 它不是一个选项,必须使用 icalendar 库。 非常感谢对 python 菜鸟的任何帮助。

【问题讨论】:

  • 所以也许它是一个icalendar.prop.vDDDTypes 对象。有什么问题?
  • 拼写错误,summery

标签: python icalendar


【解决方案1】:

代表dtstartdtend 的对象有一个属性dt,其中包含一个标准的datetime.datetime 对象。

start = event.get('dtstart')
print(start.dt)

【讨论】:

  • 令人惊讶的是,直到现在还没有人赞成这个答案:-)
  • 在文档中哪里可以找到这些信息?!在我找到这个答案之前,这让我发疯!
  • @benzkji 很可能是我直接从源代码中得到的
【解决方案2】:

这里有点晚了,但如果有帮助的话: API 已经更新,因为(我犯了同样的错误 // 复制粘贴另一个 stackoverflow 帖子)你需要使用方法 decoded() 而不是 get()

您可以在此处找到对 icalendar 的最新 API 参考:http://icalendar.readthedocs.io/en/latest/api.html

用解码替换你的调用:

date = event.decoded('dtstart')
summery = event.decoded('summary')

它应该工作。

【讨论】:

  • 不行,返回:'Event' object has no attribute 'decode'
【解决方案3】:

从你应该读过的official documentation,你可以像这样访问dtstartdtend的值 -

date = event.get('dtstart')
print date.to_ical()

它们是icalendar.prop.vDDDTypes 对象。似乎既不是字符串,也没有直观的__str__() 方法。因此你得到了那个输出。

请阅读文档。

【讨论】:

    猜你喜欢
    • 2011-03-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-14
    • 1970-01-01
    • 1970-01-01
    • 2012-07-02
    • 2012-02-13
    相关资源
    最近更新 更多