Python监听文件变化watchdog

Python监听文件变化watchdog

python第三方库watchdog可监听操作系统文件和目录的变化,使用简单方便。
使用方法如下

import datetime
import os.path

from watchdog.events import FileSystemEventHandler, FileSystemEvent, DirCreatedEvent, DirModifiedEvent, DirDeletedEvent
from watchdog.observers import Observer


class MyHandler(FileSystemEventHandler):
    def __init__(self):
        self._init_time = datetime.datetime.now()
        self._map = {}

    def dispatch(self, event: FileSystemEvent) -> None:
        if event.src_path.endswith('~'):
            return

        # 忽略所有目录,已经在event_filter中过滤
        if event.is_directory:
            return

        last_change = self._map.get(event.src_path, self._init_time)

        # 两次事件大于1秒才处理
        if datetime.datetime.now() - last_change > datetime.timedelta(seconds=1):
            self._map[event.src_path] = datetime.datetime.now()
            return super().dispatch(event)

    def on_modified(self, event):
        print('modified', event)

    def on_created(self, event: FileSystemEvent) -> None:
        print('created', event)

    def on_deleted(self, event: FileSystemEvent) -> None:
        print('deleted', event)

    def on_moved(self, event: FileSystemEvent) -> None:
        print('moved', event)


if __name__ == '__main__':
    observer = Observer()
    event_handler = MyHandler()
    # 监控当前脚本所在目录下所有文件,忽略所有目录事件
    observer.schedule(event_handler, path=os.path.dirname(__file__), recursive=True,
                      event_filter={DirCreatedEvent, DirModifiedEvent, DirDeletedEvent})
    observer.start()
    # 阻塞线程
    observer.join()

需要注意以下几点

  1. 监控的path必须是一个路径,否则不生效
  2. 继承eventhandler定义事件处理
  3. 一些文件的修改会产生临时文件,如修改word、xlsx等,在Pycharm中修改文件,需要在程序中判断。
  4. 监控的根目录下文件的变化不会产生根目录事件,根目录的子目录下文件的变化会产生相关的子目录事件。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值