在python中使用icalendar解析vDDDTypes数据的问题

问题描述 投票:0回答:1

正如您从以下内容中可能了解到的那样,我不是一个非常熟练的程序员。尽管如此,我正在尝试编写一个Python程序,用于从icalendar格式的文件导入数据并将其存储在数据库中。该文件多次出现如下情况(跳过不相关的信息): ... 开始:活动 用户编号:TU1586072026 DTSTAMP:20240125T161430Z 摘要:我的会议 描述:无 ... 创建时间:20231004T161313Z 最后修改:20231023T162939Z 结束:VEVENT

我的问题在于 LAST-MODIFIED 值的解码。

如果我跑步:

    print("dtstamp: " + str(component.get('dtstamp').dt))
    print("created: " + str(component.get('created').dt))
    print("modified: " + str(component.get('last-modified').dt))

以正确的方式打印前两个后出现错误:

dtstamp: 2024-01-25 16:14:30+00:00
created: 2023-10-04 16:13:13+00:00

Traceback (most recent call last):
  File "/usr/lib/python3.11/tkinter/__init__.py", line 1948, in __call__
    return self.func(*args)
           ^^^^^^^^^^^^^^^^
  File "/home/sailslack/Coding/Python/PIM/cal_import.py", line 97, in ical_import
    print("modified: " + str(component.get('last-modified').dt))
                             ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
AttributeError: 'NoneType' object has no attribute 'dt'

如果我在最后一行不使用 .dt 属性:

    print("dtstamp: " + str(component.get('dtstamp').dt))
    print("created: " + str(component.get('created').dt))
    print("modified: " + str(component.get('last-modified')))

我没有收到任何错误,但是:

    dtstamp: 2024-01-25 16:14:30+00:00
    created: 2023-10-04 16:13:13+00:00
    modified: vDDDTypes(2023-10-23 16:29:39+00:00, Parameters({}))

看起来就像我应该像其他属性一样使用 .dt 属性。

我做错了什么?

python datetime icalendar decoding
1个回答
0
投票

这个例子适用于我的Python环境:

from icalendar import Calendar, Event
from datetime import datetime
from pytz import UTC

cal = Calendar()

with open('iCalendar.ics', 'rb') as e:
    ecal = Calendar.from_ical(e.read())
    for component in ecal.walk():
        if component.name == 'VEVENT':
            print(component.name)
            print(component.get('DTSTAMP').dt)
            print(component.get('LAST-MODIFIED').dt)
            print(component.get('CREATED').dt)

输出:

VEVENT
2024-01-25 16:14:30+00:00
2023-10-23 16:29:39+00:00
2023-10-04 16:13:13+00:00
© www.soinside.com 2019 - 2024. All rights reserved.