跳转到主要内容

iCalendar解析器/生成器

项目描述

icalendar包是一个符合RFC 5545的iCalendar文件解析器/生成器。


主页::

https://icalendar.readthedocs.io

代码::

https://github.com/collective/icalendar

邮件列表::

https://github.com/collective/icalendar/issues

依赖::

python-dateutilpytz

许可::

BSD


Python Package Version on PyPI PyPI - Python Version Downloads from PyPI GitHub Actions build status for main Documentation Status Test Coverage

快速入门指南

icalendar允许您使用Python 创建检查修改日程信息。

安装该软件包,运行

pip install icalendar

检查文件

您可以打开一个.ics文件并查看所有事件

>>> import icalendar
>>> from pathlib import Path
>>> ics_path = Path("src/icalendar/tests/calendars/example.ics")
>>> with ics_path.open() as f:
...     calendar = icalendar.Calendar.from_ical(f.read())
>>> for event in calendar.walk('VEVENT'):
...     print(event.get("SUMMARY"))
New Year's Day
Orthodox Christmas
International Women's Day

修改内容

此类日历可以编辑并再次保存。

>>> calendar["X-WR-CALNAME"] = "My Modified Calendar"  # modify
>>> print(calendar.to_ical()[:129])  # save modification
BEGIN:VCALENDAR
VERSION:2.0
PRODID:collective/icalendar
CALSCALE:GREGORIAN
METHOD:PUBLISH
X-WR-CALNAME:My Modified Calendar

创建事件、待办事项、日志、闹钟等

icalendar 支持创建和解析 iCalendar(RFC 5545)标准中所有类型的对象。

>>> icalendar.Event()  # events
VEVENT({})
>>> icalendar.FreeBusy()  # free/busy times
VFREEBUSY({})
>>> icalendar.Todo()  # Todo list entries
VTODO({})
>>> icalendar.Alarm()  # Alarms e.g. for events
VALARM({})
>>> icalendar.Journal()   # Journal entries
VJOURNAL({})

请查看更多示例:更多示例

使用您选择的时区

使用 icalendar,您可以本地化事件以在不同的时区举行。 zoneinfodateutil.tzpytzicalendar 兼容。以下示例创建了一个使用所有时区实现的事件,结果相同

>>> import pytz, zoneinfo, dateutil.tz  # timezone libraries
>>> import datetime, icalendar
>>> e = icalendar.Event()
>>> tz = dateutil.tz.tzstr("Europe/London")
>>> e["X-DT-DATEUTIL"] = icalendar.vDatetime(datetime.datetime(2024, 6, 19, 10, 1, tzinfo=tz))
>>> tz = pytz.timezone("Europe/London")
>>> e["X-DT-USE-PYTZ"] = icalendar.vDatetime(datetime.datetime(2024, 6, 19, 10, 1, tzinfo=tz))
>>> tz = zoneinfo.ZoneInfo("Europe/London")
>>> e["X-DT-ZONEINFO"] = icalendar.vDatetime(datetime.datetime(2024, 6, 19, 10, 1, tzinfo=tz))
>>> print(e.to_ical())  # the libraries yield the same result
BEGIN:VEVENT
X-DT-DATEUTIL;TZID=Europe/London:20240619T100100
X-DT-USE-PYTZ;TZID=Europe/London:20240619T100100
X-DT-ZONEINFO;TZID=Europe/London:20240619T100100
END:VEVENT

带 zoneinfo 的版本 6

icalendar 版本 6 将时区实现切换到 zoneinfo。这仅影响您使用 from_ical() 解析 icalendar 对象的情况。功能已扩展,并从 6.0.0 版本开始测试了 pytzzoneinfo 两种时区实现。

默认情况下,从 6.0.0 版本开始,将创建 zoneinfo 时区。

>>> dt = icalendar.Calendar.example("timezoned").walk("VEVENT")[0]["DTSTART"].dt
>>> dt.tzinfo
ZoneInfo(key='Europe/Vienna')

如果您希望在解析结果中继续接收 pytz 时区,您可以接收所有最新更新,并切换回早期行为

>>> icalendar.use_pytz()
>>> dt = icalendar.Calendar.example("timezoned").walk("VEVENT")[0]["DTSTART"].dt
>>> dt.tzinfo
<DstTzInfo 'Europe/Vienna' CET+1:00:00 STD>

版本 6 在 main 分支 上。它与 Python 版本 3.8 - 3.12 和 PyPy3 兼容。我们预计带有版本 6+main 分支将接收最新更新和功能。

进一步阅读

您可以在此项目中了解更多关于此项目的信息

项目详情


发布历史 发布通知 | RSS 源

下载文件

下载适用于您的平台的文件。如果您不确定选择哪个,请了解更多关于安装包的信息。

源分布

icalendar-6.0.0.tar.gz (81.9 kB 查看哈希值)

上传时间 源代码

构建分布

icalendar-6.0.0-py3-none-any.whl (126.0 kB 查看哈希值)

上传时间 Python 3

由以下组织支持