Python:如何每隔x分钟检查一次XML文件中是否有新条目,但不针对先前发出警报的条目发出警报

2024-05-12 20:49:35 发布

您现在位置:Python中文网/ 问答频道 /正文

我使用urllib2和ElementTree监视XML文件中的新条目,并使用Pushover在每次检测到新条目时发送推送通知。条目存在于XML文件中的时间从30分钟到4小时不等。脚本每5分钟运行一次。什么是最好的方法使脚本只在新的条目上提醒我,而不是每隔5分钟通知一次相同的条目?在


Tags: 文件方法脚本时间条目xmlurllib2小时
1条回答
网友
1楼 · 发布于 2024-05-12 20:49:35

条目是否与时间戳相关联,使得每次更新文件时,新条目的时间戳总是比旧条目晚?如果是这样,只需保留上一个推送项的时间戳,在解析XML文件时,推送较新的项并丢弃旧项。在

如果不是这样,Python有相当不错的集合操作算法,所以我尝试一下:保留一个set已经被推送的条目。在

already_pushed = set()

每次运行脚本时,请执行以下操作:

  1. 从文件中创建另一个set

    from_file = parse_file()
    
  2. “减”(set difference)已推送的项目集

    new_entries = from_file - already_pushed
    
  3. 推送新条目

    push_all(new_entries)
    
  4. 检查原始设置,修剪任何超过4小时+5分钟的内容

    cutoff = datetime.now() - timedelta(hours=4, minutes=5) # I forget the syntax
    already_pushed = set(e for e in already_pushed if e.timestamp > cutoff)
    
  5. 添加新推送的条目

    already_pushed += new_entries
    

因为你每五分钟才运行一次,除非文件中有大量的条目,否则它应该足够快了。在

如果效率是一个问题,那么您可以通过保持已推送的条目的排序(按时间戳)列表,将文件解析为类似排序的条目列表,并运行一个合并算法来处理来自一个或另一个列表的条目,并根据需要推送并保留或丢弃它。但是使用一个更好的算法所获得的效率收益可能远远超过用Python实现整个过程所带来的效率损失。在这种情况下,你可能不得不使用C或C++来获得更好的性能。在

相关问题 更多 >