Икал в питоне - удаление событий - PullRequest
1 голос
/ 28 ноября 2011

Я использую пакет iCalendar для python, вы можете увидеть здесь: http://codespeak.net/icalendar/

Я хочу удалить событие. Кто-нибудь может придумать, как это сделать?

Спасибо

Ответы [ 2 ]

1 голос
/ 28 ноября 2011

В документации к пакету codepeak ничего не говорится о функции удаления, поэтому, если не существует недокументированной, которая работает на месте с существующим файлом, вам необходимо прочитать файл календаря и перечислить его компоненты:

for k,v in cal.items():

и запишите все компоненты, кроме тех, которые должны быть удалены, в новый файл.

Поскольку RFC5545 является простой спецификацией, вероятно, безопасно просто удалить запись из словаря cal напрямую.Но в целом могут существовать зависимости между компонентами или побочными эффектами (такими как обновление индекса или контрольной суммы), так что манипулирование структурой напрямую вместо вызова метода может привести к внутренним несоответствиям.Поскольку это Python, вы можете проверить метод add () на наличие побочных эффектов и создать свой собственный метод delete (), который переворачивает все, что он делает.

0 голосов
/ 08 сентября 2014

если нужно, это функция для удаления компонента с использованием библиотеки icalendar (http://codespeak.net/icalendar/) в python:

def del_component_with_uid(cal,uid):
    cal_str=cal.to_ical()
    component_find=find_component_with_uid(cal,uid)
    if component_find is not False:
        firstfind = unicode(cal_str, encoding="latin1").find(unicode(component_find, encoding="latin1"))
        export_cal(cal_str[:firstfind]+cal_str[firstfind+len(component_find):])

def find_component_with_uid(cal,uid):
    propert = uid
    for component in cal.subcomponents:
        for prop in component.property_items():
            if prop[0] == 'UID' and prop[1] == uid:
                return component.to_ical()
    return False

def export_cal(calendar_str):
    f = open('./Calendars/example.ics', 'w')
    f.write(calendar_str)
    f.close() 
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...