Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/295.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
python中的Ical-删除事件_Python_Icalendar - Fatal编程技术网

python中的Ical-删除事件

python中的Ical-删除事件,python,icalendar,Python,Icalendar,我正在使用用于python的iCalendar包,您可以在这里看到: 我想删除一个事件。有人能想出一个办法吗 感谢codespeak软件包的文档中没有提到删除功能,因此,除非有一个未经文档化的功能在现有文件上运行,否则您需要读取日历文件,列举其组件: for k,v in cal.items(): 并将除要删除的组件以外的所有组件写入新文件 由于RFC5545是一个简单的规范,直接从cal字典中删除一条记录可能是安全的。但一般来说,组件之间可能存在依赖关系或副作用(如更新索引或校验和),因此

我正在使用用于python的iCalendar包,您可以在这里看到:

我想删除一个事件。有人能想出一个办法吗


感谢

codespeak软件包的文档中没有提到删除功能,因此,除非有一个未经文档化的功能在现有文件上运行,否则您需要读取日历文件,列举其组件:

for k,v in cal.items():
并将除要删除的组件以外的所有组件写入新文件


由于RFC5545是一个简单的规范,直接从cal字典中删除一条记录可能是安全的。但一般来说,组件之间可能存在依赖关系或副作用(如更新索引或校验和),因此直接操纵结构而不是调用方法可能会造成内部不一致。由于这是Python,您可以检查add()方法的副作用,并创建自己的delete()方法,该方法可以反转它所做的一切。

如果需要,这是使用Python中的icalendar库()删除组件的函数:

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() 

cal.items是一个空列表。没有特别的帮助。