正如您从以下内容中可能了解到的那样,我不是一个非常熟练的程序员。尽管如此,我正在尝试编写一个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环境:
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